個人開発をしていてなかなか苦しんだので備忘録として残しておきます。
環境
Docker
Rails(APIモード):v7.0.4.2
発生した問題
- Dockerに本来表示されるはずのログが表示されない
- 何もログが出ないのでデバッグもできない
試したこと
- docker-compose.ymlに以下の設定を追加
app:
build: .
env_file:
- ./.env
environment:
- RAILS_ENV=development
command: bash -c "rm -f tmp/pids/server.pid && bundle install && bundle exec pumactl start"
volumes:
- .:/app/webapp
- ./tmp/sockets:/app/webapp/tmp/sockets
ports:
- 3000:3000
tty: true #追加
stdin_open: true #追加
depends_on:
- db
- development.rbの
config.consider_all_requests_local
がtrueになっていること - development.logの確認→出力されていた
- puma.stout.logの確認→出力されていた
などなど。
最初デバッグしようと思ってログが出ていないことに気づいたので、
デバッグのgemの問題かなと思ってそっち方面でも色々調べてました。
原因と解決策
puma.rb
とdevelopment.rb
の設定の問題のようでした。
puma.rb
については、標準出力がlog/puma.stdout.log
にリダイレクトしていたようです。
修正前
puma.rb
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
修正後
puma.rb
unless ENV.fetch("RAILS_ENV", "development") == "development"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
end
あと、development.rbに以下を追加しました。
development.rb
config.logger = Logger.new(STDOUT)
設定周りはネットの記事を参考にそのままコピペしたので、
標準出力のこととか全然わかっていませんでした。
良い勉強になりました。
もっとスマートな解決方法とかあればぜひコメントいただけたらとも思います!
参考