はじめに
Ruby 2.5.1 + Rails 5.2 環境で作成したアプリをphusion/passenger-ruby25イメージを利用してコンテナ化した際に何箇所か引っかかったところがあったので備忘録として投稿します。
- Ruby 2.5.1 を利用できるようにする
- Rails 5.2 のアプリが起動しない
- Railsのログがコンソールへ出力されない ←本投稿
問題点
コンテナを起動させているコンソールにRailsのログが出力されない。
(以前までは特別な設定をしなくてもログが出力されていた記憶だが。。。)
$ docker run -p 3000:80 \
rails-image
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/my_init.d/30_presetup_nginx.sh...
*** Running /etc/rc.local...
*** Booting runit daemon...
*** Runit started as PID 9
ok: run: /etc/service/nginx-log-forwarder: (pid 17) 0s
...
解決方法
環境変数:RAILS_LOG_TO_STDOUTを設定して、Railsのログを標準出力へアウトプットさせる。
Railsのコンフィグ
config/environment/production.rb
には環境変数:RAILS_LOG_TO_STDOUTが存在した場合にログを標準出力へアウトプットする設定がデフォルトで含まれている。
config/environment/production.rb
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
Passengerのコンフィグ
passenger上で動かすアプリで利用する環境変数は、事前に定義しておく必要があるので、RAILS_LOG_TO_STDOUTを追加しておく。
secret_key.conf
# 省略
env RAILS_LOG_TO_STDOUT;
コンテナ起動
環境変数:RAILS_LOG_TO_STDOUTを指定した状態でコンテナを起動する。
$ docker run -p 3000:80 \
-e RAILS_LOG_TO_STDOUT=ON \
rails-image
補足:
環境変数:RAILS_LOG_TO_STDOUTに指定する値は何でもよい