RailsをDocker上で動かして開発する
DatabaseはMySQLを使ってそれは別コンテナで立ち上げる
これらをうまく扱うためにdocker-compose使ってdocker-compose up
で一気に立ち上げられるようにする
みたいなのはよく見る
docker-compose.yml
version: "3" services: database: image: mysql:5.7.8 environment: - MYSQL_ROOT_PASSWORD=password ports: - '3306:3306' rails: image: my-rails-image command: ["bundle", "exec", "rails", "s", "-b", "0.0.0.0"] depends_on: - database volumes: - .:/my-rails-project ports: - "3000:3000"
こんな感じの設定ファイルを用意してdocker-compose up
すればブラウザ上でport3000でアクセスできたとする
問題
を使ってコード内でbinding.pry
をしてデバッグをしているが Docker上でたてたrails serverではそれがスルーされてしまった
これをまずとめるにはdocker-compose.yml
を修正する必要があり
docker-compose.yml
version: "3" services: database: image: mysql:5.7.8 environment: - MYSQL_ROOT_PASSWORD=password ports: - '3306:3306' rails: tty: true # この行と stdin_open: true # この行を追加 image: my-rails-image command: ["bundle", "exec", "rails", "s", "-b", "0.0.0.0"] depends_on: - database volumes: - .:/my-rails-project ports: - "3000:3000"
これを追加してコンテナを立ち上げなおす
するとdocker-compose logs
を見てみるととまったことがわかる
ただそこはlogsの中身なのでコマンドはうてない
どうするかでいうと docker attach
を使う
これにより今回の例だとrails server
のプロセスにattachすることが出来るのでbinding.pry
でとまっているところでデバッグすることが出来るようになる
終了するときはCtrl-c
で抜けることが出来るのだが、これはプロセス自体もとまってしまうのでコンテナがとまってしまうので docker-compose start rails
のようにしてstartしないといけない
最後に
docker attach
した後Ctrl-c
でぬけるとプロセスが終了してしまうのはattachしつづければ良い話でもある
一旦はこれでやっていくがもっとスマートな方法があったら知りたい