Help us understand the problem. What is going on with this article?

【解決方法】passenger利用時にRailsのログがコンソールへ出力されない

More than 1 year has passed since last update.

はじめに

Ruby 2.5.1 + Rails 5.2 環境で作成したアプリをphusion/passenger-ruby25イメージを利用してコンテナ化した際に何箇所か引っかかったところがあったので備忘録として投稿します。

問題点

コンテナを起動させているコンソールに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に指定する値は何でもよい

NaokiIshimura
Ruby on Rails Engineer.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away