自分用メモです。
まっさらなrails環境が欲しいときにいつも調べているので。
rbenv + bundlerでrails環境を用意する手順
自分的には1番ベーシックなやり方です。
rbenvとbundlerが入っていることが前提です。
また、ここではruby2.3.0、rails5.0.0の場合とします。
$ mkdir myapp
$ cd myapp
$ rbenv versions
2.3.0が入っていなければinstallする
$ rbenv install 2.3.0
$ rbenv local 2.3.0
2.3.0に*が付いていることを確認する
$ rbenv versions
$ bundle init
$ vim Gemfile
# railsのところのコメントアウトを外し、railsのバージョンを指定しておく
gem 'rails', '~> 5.0.0'
$ bundle install --path vendor/bundle
$ bundle exec rails new .
GemfileはYで上書きする
参考 http://qiita.com/youcune/items/222777415f00d19cccb4
dockerを使ってrails環境を用意する手順
rails + postgresqlの場合
前提としてdocker for macを使ってdocker環境を構築しました。
docker初心者なのでこちらを参考にruby2.3.0、rails5.0.0、postgresqlの場合とします。
$ mkdir myapp
$ cd myapp
$ touch Dockerfile
$ vim Dockerfile
FROM ruby:2.3.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
$ touch Gemfile
$ vim Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0'
$ touch Gemfile.lock
$ touch docker-compose.yml
$ vim docker-compose.yml
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3010:3000"
depends_on:
- db
3010:3000のところはmacのport3010番とコンテナ内の3000番をつなぐという意味になります(例えばmacのlocalhost:3000で何も起動していなければ3000番のままで問題ないので良いです)
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
rails newすると生成されるファイルなどが生成されているか確認する
$ ls -l
$ vim Gemfile
# 以下の行のコメントアウトを外す
gem 'therubyracer', platforms: :ruby
$ docker-compose build
$ vim config/database.yml
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
test:
<<: *default
database: myapp_test
$ docker-compose up
別のターミナルで
$ docker-compose run web rake db:create
そして http://localhost:3010/ にアクセスすると以下のページが表示されます。
編集してみる
トップページをオリジナルのページに変更してみます。
以下のコマンドでwelcome controllerとindex actionを作ります。
$ docker-compose run web rails generate controller welcome index
routingを変更します。
$ vim config/routes.rb
# get 'welcome/index'
root 'welcome#index'
そして http://localhost:3010/ にアクセスすると、コンテナ側にもすぐ反映されます。
rails + mysqlの場合
こちらを参考にしました。
上記手順の$ vim docker-compose.yml
までは同じです。
version: '2'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: hogehoge
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3011:3000"
depends_on:
- db
注意
environment:
MYSQL_ROOT_PASSWORD: hogehoge
この部分がないと起動したときに以下のようなエラーになります(参考)。
db_1 | error: database is uninitialized and password option is not specified
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
手順に戻って、以下を実行します。
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
rails newすると生成されるファイルなどが生成されているか確認する
$ ls -l
$ vim Gemfile
# 以下の行のコメントアウトを外す
gem 'therubyracer', platforms: :ruby
$ docker-compose build
$ vim config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: hogehoge
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
$ docker-compose up
別のターミナルで
$ docker-compose run web rake db:create
そして http://localhost:3011/ にアクセスすると以下のページが表示されます。
注意
$ docker-compose up
で以下のようなエラーになる場合は、ここに書いてある通りにtmp/pids/server.pid
を削除して$ docker-compose up
すると起動できます。
web_1 | => Booting Puma
web_1 | => Rails 5.0.0 application starting in development on http://0.0.0.0:3000
web_1 | => Run `rails server -h` for more startup options
web_1 | A server is already running. Check /myapp/tmp/pids/server.pid.
web_1 | Exiting
myappm_web_1 exited with code 1