Ruby on Rails の環境を Docker で構築して RubyMine でデバッグ (Mac Book Pro)

#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にインストールするのは、この２種類だけでOKです。
インストーラをダウンロードして実行します。

## Dockerの設定、実行
* Dockerfileを作成して以下に格納します。場所は任意でOKです。
<br> /Users/hoge/dev/docker/test/Dockerfile

```docker: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と同じ場所です。
<br> /Users/hoge/dev/docker/test/docker-compose.yml
<br> **リモートデバッグいらないという場合は以下のコマンドを上の方（#command:の部分）に切り替えるとRailsサーバが通常起動します。**

```docker: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と同じ場所です。
<br> /Users/hoge/dev/docker/test/Gemfile
<br>


```ruby: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です。
<br> /Users/hoge/dev/docker/test/Gemfile.lock

```ruby:Gemfile.lock

```

* Dockerfileをビルドします。
<br> ※ これ以降のコマンドは『/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
```

```ruby: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のコンテナを起動します。
<br> 停止させるときは『docker-compose down』ではなく『docker-compose stop』が良いです。

```
$ docker-compose up
```

## RubyMineでリモートデバッグ
* リモートとローカルのフォルダを修正します。 
<br> Remote root folder : /myapp
<br> Local root folder : /Users/hoge/dev/docker/test

<img width="1183" alt="スクリーンショット 2017-08-20 13.08.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/198055/4a4003b4-f3e7-cfa0-672d-3e5f677a6ed5.png">

 
* ブレークポイントを指定後、虫ボタンを押してdockerに対してリモートデバッグの接続を行います。<br> Rails関連のGemをローカルにインストールしていないため、自作のクラスのデバッグのみ可能です。Rails関連もデバッグしたい場合はGemのローカルへのインストールが必要です。
★ Gemのインストール方法を以下に追記しました。<br> http://qiita.com/kojima4twt/items/32b15a50d0552172118a
<br>

*  http://localhost:3000/users をブラウザで開いてデバッグを開始します。