#Ruby on Rails の環境を Docker で構築して RubyMine でデバッグ (Mac Book Pro)
再構築するときのためにメモしておきます。
ローカルをあまり汚さずに構築できるのがメリットです。
開発を進めるうちに問題点が出てきたら更新していこうと考えています。
参考文献
- http://qiita.com/pocari/items/9f83573272f2a2754a76
- http://qiita.com/koduki/items/3aafc38c6c518bef2af3
- http://qiita.com/kmt/items/89c31d647bf42bf2300c
- http://post.simplie.jp/posts/114
Docker、RubyMineのインストール
Macにインストールするのは、この2種類だけでOKです。
インストーラをダウンロードして実行します。
Dockerの設定、実行
- Dockerfileを作成して以下に格納します。場所は任意でOKです。
/Users/hoge/dev/docker/test/Dockerfile
Dockerfile
FROM ruby:2.3.3
RUN apt-get update -qq && \
apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile .
ADD Gemfile.lock .
ENV BUNDLE_JOBS=4 \
BUNDLE_PATH=/bundle
RUN bundle install
ADD . .
- docker-compose.ymlを作成して以下に格納します。場所はDockerfileと同じ場所です。
/Users/hoge/dev/docker/test/docker-compose.yml
リモートデバッグいらないという場合は以下のコマンドを上の方(#command:の部分)に切り替えるとRailsサーバが通常起動します。
docker-compose.yml
version: '2'
services:
web:
build: .
#command: bundle exec rails s -p 3000 -b 0.0.0.0
command: bundle exec rdebug-ide --port 1234 --dispatcher-port 26162 --host 0.0.0.0 -- bin/rails s -b 0.0.0.0 -p 3000
container_name: web
depends_on:
- db
ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:1234:1234"
- "127.0.0.1:26162:26162"
stdin_open: true
tty: true
volumes:
- .:/myapp
volumes_from:
- bundle
db:
image: postgres
bundle:
image: busybox
volumes:
- /bundle
- Gemfileを作成して以下に格納します。場所はDockerfileと同じ場所です。
/Users/hoge/dev/docker/test/Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
group :development, :test do
# remote debug
gem 'ruby-debug-ide'
gem 'debase'
end
- Gemfile.lockを作成して以下に格納します。場所はDockerfileと同じ場所です。中身は空でOKです。
/Users/hoge/dev/docker/test/Gemfile.lock
Gemfile.lock
- Dockerfileをビルドします。
※ これ以降のコマンドは『/Users/hoge/dev/docker/test』に移動して実行します。
$ cd /Users/hoge/dev/docker/test
$ docker-compose build
- Railsのプロジェクトを生成します。
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
- データベースの接続設定をします。
$ vi config/database.yml
database.yml
config=/opt/local/lib/postgresql84/bin/pg_config
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: app_development
username: postgres
host: db
test:
<<: *default
database: app_test
production:
<<: *default
database: app_production
username: app
password: <%= ENV['APP_DATABASE_PASSWORD'] %>
- Gemをインストールします。
$ docker-compose run web bundle install
- データベースを作成します。
$ docker-compose run web rake db:create
$ docker-compose run web rails generate scaffold user name:string age:integer
$ docker-compose run web rake db:migrate
- dockerのコンテナを起動します。
停止させるときは『docker-compose down』ではなく『docker-compose stop』が良いです。
$ docker-compose up
RubyMineでリモートデバッグ
- リモートとローカルのフォルダを修正します。
Remote root folder : /myapp
Local root folder : /Users/hoge/dev/docker/test
- ブレークポイントを指定後、虫ボタンを押してdockerに対してリモートデバッグの接続を行います。
Rails関連のGemをローカルにインストールしていないため、自作のクラスのデバッグのみ可能です。Rails関連もデバッグしたい場合はGemのローカルへのインストールが必要です。
★ Gemのインストール方法を以下に追記しました。
http://qiita.com/kojima4twt/items/32b15a50d0552172118a
- http://localhost:3000/users をブラウザで開いてデバッグを開始します。