Пользовательские регистраторы рельсов не сбрасываются при остановке пассажира

#ruby-on-rails #ruby-on-rails-3 #logging #passenger

#ruby-on-rails #ruby-on-rails-3 #ведение журнала #пассажир

Вопрос:

У меня есть несколько регистраторов в моем приложении rails, которые инициализируются таким образом в процессе производства:

 log_file = File.open("#{Rails.root}/log/my_log_#{Rails.env}.log", 'a')
log_file.sync = !Rails.env.production?

LOG = Logger.new(log_file)
 

Я использую приведенное выше следующим образом:

 LOG << "my messagen"
 

Обратите внимание, что log_file.sync это значение false в рабочей среде, потому что я не хочу записывать на диск каждое зарегистрированное сообщение. Проблема, которую я замечаю, заключается в том, что когда я останавливаю свой rails apache server ( sudo /etc/init.d/httpd stop ), мой LOG не сбрасывается. В результате я теряю сообщения. Это ожидаемое поведение?

Странная часть заключается в том, что я устранял неполадки с помощью rails console (production) для записи множества сообщений журнала в указанный LOG . Когда я закрыл консоль rails, мой LOG сбросил, как и ожидалось. Так что это заставляет меня поверить, что что-то не так с тем, как я закрываю свой экземпляр rails в Passenger.

Итак, почему происходит LOG правильная очистка в консоли rails, но не на самом сервере Passenger? Чего мне не хватает?

Я использую Rails 3.2.8 и использую Apache с / Passenger 3.0.17.

Спасибо!

Ответ №1:

Обновление до Passenger 4.0.45 устранило проблему.