ほたてメモ

日々学んだことをメモメモ

docker環境でbinding.pryのコンソールが表示されなかった件

問題

docker-compose上で、rails6.1(APIモード) + nginxの構成を作った。

binding.pryをすると、そのステップで止まっているが、docker attachしてつないでもコンソールが表示されない。

continue や exit すると先に進むので、動いてはいそうだが表示されないと不便なので調査した。

解決方法

最終的に、puma.rbで、標準出力が log/puma.stdout.log にリダイレクトされていたのが原因だった。

stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

開発環境ではファイルにリダイレクトしない形にしたらコンソールが表示されるようになった。

unless ENV.fetch("RAILS_ENV", "development") == "development"
  stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
end

その他、設定した箇所

docker-compose.ymlに下記の2つは必要

stdin_open: true
tty: true

binding.pryで止めると、60秒で500エラーになってしまう。

  • これはnginx側でタイムアウトになっていたので、proxy_read_timeout を300秒にして回避した(本番は要調整)

また、今回は関係なかったが、下記も参考になった