2012-03-09 26 views
9

Я написал демонстрационное приложение HelloWorld Rails и протестировал его с помощью WEBrick (он даже не использует БД, это просто контроллер, который печатает «привет мир»). Затем я попытался развернуть его на локальном Apache, работающем с помощью Passenger. На самом деле этот тест - это просто заставить работать Пассажир (это мой первый раз развертывание на Apache). Теперь я даже не уверен, что Пассажир работает, но я не ошибаюсь на стороне Apache.Нет сообщений журнала в production.log

Когда я стреляю http://rails.test/, браузер показывает страницу ошибок Rails 500 - поэтому я предполагаю, что Пассажир работает. Я хочу исследовать журналы, но бывает, что production.log пуст! Я не думаю, что это проблема разрешения, потому что если я удалю файл, он будет восстановлен при перезагрузке страницы. Я пытался изменить уровень войти conf/environments/production.rb, пытался вручную писать в лог-файл с Rails консолью производством и

Rails.logger.error('asdf') 

она возвращает true, но ничего не получает, написанный production.log. Путь (полученный на Rails.logger.inspect) правильный, и я замечаю, что файл воссоздается, если я вручную удалю его. Как я могу узнать, что происходит?

(я уже проверил журналы Apache, плюс я поставил самый высокий уровень отладки для Пассажира, но это, кажется, проблема Rails, поэтому не регистрируется на сервере)

+0

У меня все еще есть эта проблема, хотя я в рельсах 4 .... что вы в итоге делаете? – Braden

+0

Просто обновил Rails. Это может быть регрессия – Raffaele

ответ

13

Предполагая, что вы работаете в Rails 3.2. 1, это ошибка. Это было patched in 3.2.2.

Если вы не можете обновить до 3.2.2 по любой причине, this comment on GitHub has a workaround:

# config/initializers/patch_rails_production_logging.rb 
Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger 
+0

Странно, что я играл с 'Logger.flush' в консоли Rails, но это не имело никакого эффекта. Модернизация решила мою проблему – Raffaele

+0

Рад, что помогло. Я обновил ответ обходным путем для тех, кто не может обновить. – Brandan

+0

'undefined method 'sync =' for nil: NilClass (NoMethodError)' с рельсами 4.1.2 – RAJ

3

Установка это работает на рельсах 3.2.11:

Rails.logger = ActiveSupport :: BufferedLogger.new (Rails.root.join («log», «production.log»))

+2

привет - где я могу добавить эту строку? – undefined

+0

Я поместил это в инициализатор в config. например, в 'config/initializers/logger.rb':' if! Rails.env.development? Rails.logger = ActiveSupport :: BufferedLogger.new (Rails.root.join ("log", "# {Rails.env} .log")) end' Серьезно, как мне получить новую строку без вырезания в новой строке? Если я нажал клавишу ввода, будет сохранено мое редактирование. –