【问题标题】:No log messages in production.logproduction.log 中没有日志消息
【发布时间】:2012-03-26 23:46:36
【问题描述】:

我编写了一个演示 HelloWorld Rails 应用程序并使用 WEBrick 对其进行了测试(它甚至不使用数据库,它只是一个打印“hello world”的控制器)。然后我尝试将它部署到由Passenger驱动的本地Apache。事实上,这个测试只是为了让乘客工作(这是我在 Apache 上的第一次部署)。现在我什至不确定Passenger 是否有效,但我在Apache 端没有收到任何错误。

当我触发 http://rails.test/ 时,浏览器会显示 Rails 500 错误页面 - 所以我假设乘客可以工作。 我想调查日志,但碰巧 production.log 是空的! 我认为这不是权限问题,因为如果我删除该文件,当我重新加载页面时它会重新创建。我尝试更改conf/environments/production.rb 中的日志级别,尝试使用 Rails 控制台生产手动写入日志文件和

 Rails.logger.error('asdf')

它返回true,但没有任何内容写入production.log。路径(通过 Rails.logger.inspect 获得)是正确的,我注意到如果我手动删除该文件,则会重新创建该文件。我怎么知道发生了什么?

(我已经检查了 Apache 日志,另外我为 Passenger 设置了最高调试级别,但这似乎是 Rails 问题,所以服务器没有记录)

【问题讨论】:

  • 我仍然有这个问题,即使我在 Rails 4 中......你最后做了什么?
  • 刚刚升级 Rails。这可能是一种回归

标签: ruby-on-rails ruby-on-rails-3 passenger


【解决方案1】:

在 Rails 3.2.11 上设置此项工作:

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

【讨论】:

  • 嗨 - 我在哪里添加这一行?
  • 我把它放到了 config 下的初始化器中。例如,config/initializers/logger.rb:if !Rails.env.development? Rails.logger = ActiveSupport::BufferedLogger.new(Rails.root.join("log","#{Rails.env}.log")) end 说真的,如何在不剪切粘贴的情况下获得换行符?如果我按回车键保存我的编辑。
【解决方案2】:

假设您运行的是 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

【讨论】:

  • 奇怪的是,我在 Rails 控制台中玩了Logger.flush,但没有任何效果。升级解决了我的问题
  • 很高兴有帮助。我为无法升级的任何人更新了答案。
  • undefined method 'sync=' for nil:NilClass (NoMethodError) with rails 4.1.2
  • 你不应该在 Rails 4 中需要这个。这在 Rails 3.2.2 中已修复,这个答案只是 Rails 3.2.1 上的人的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
相关资源
最近更新 更多