Dockerでbinding.pryするには設定が必要だった。
アタッチということをしなければいけないらしい
Gemfileに下記を記載
Gemfile
group :development do
gem 'pry-byebug'
end
docker-compose.ymlファイルに下記の2つを設定する
stdin_open: true
tty: true
docker-compose.yml
back:
build: back/
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
stdin_open: true #追記
tty: true #追記
env_file:
- ./back/environments/db.env
# 以下省略
Gemfileを変更したので、buildしなおす
Dockerfileがある場合
今回の場合
Dockerfileの中に下記のような記述があり、再度読み込みをしなければいけない
bundle installやbundle updateコマンドは使用しないでもbuildし直すことで構築される。
CMD ["bundle", "exec", "rails", "s", "puma", "-b", "0.0.0.0", "-p", "3000", "-e", "development"]
$ docker-compose build
検証場所にbinding.pryを記述
$ docker-compose up
別のターミナルで
アタッチ
$ docker attach <コンテナNAME or ID>
$ docker ps
でNAME、IDは確認できます
検証すると...
13: else
14: binding.pry
=> 15: User = User.find_by(name: '山田')
// 省略
>
止まった!
デバッグから出る
$ exit
アタッチから出る
control + P -> control + Q
Control + D or C だとコンテナが停止してしまうので上記で安全にデタッチしましょう!!
番外
デバッグ終えてフォルダをみると
コマンドのログが書かれたファイルが生成されています。
gitignoreに記載しておきます。
gitignore
/.ash_history
/.local/*
アタッチってそもそも何?