#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 устранило проблему.