2012-03-09 60 views
9

我编写了一个演示HelloWorld Rails应用程序并使用WEBrick进行了测试(它甚至不使用数据库,它只是一个打印“hello world”的控制器)。然后我尝试将它部署到一个以Passenger为驱动的本地Apache。实际上这个测试只是为了让Passenger工作(这是我第一次在Apache上部署)。现在我甚至不确定Passenger是否可以工作,但我在Apache方面没有任何错误。production.log中没有日志消息

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

Rails.logger.error('asdf') 

返回true但没有被写入production.log。路径(每个Rails.logger.inspect获得)是正确的,我发现如果手动删除它,文件将被重新创建。我怎么知道发生了什么?

(我已经检查了Apache日志,加上我设置乘客最高调试级别,但它似乎是一个Rails的问题,因此不被服务器记录)

+0

即使我在rails 4中,我仍然有这个问题....你最终做了什么? – Braden 2013-10-20 01:09:25

+0

刚升级的Rails。这可能是一个回归 – Raffaele 2013-10-20 07:55:06

回答

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

奇怪的是,我在Rails控制台中使用了'Logger.flush',但没有任何效果。升级解决了我的问题 – Raffaele 2012-03-09 14:57:52

+0

很高兴帮助。我为任何无法升级的人提供了一种解决方法,更新了答案。 – Brandan 2012-03-09 15:47:29

+0

'nil:NilClass(NoMethodError)'的undefined方法'sync ='with rails 4.1.2 – RAJ 2014-07-19 15:43:39

3

设置该工程在轨道上3.2.11:

Rails.logger =的ActiveSupport :: BufferedLogger.new (Rails.root.join(“log”,“production.log”))

+2

嗨 - 我在哪里添加这条线? – undefined 2013-09-13 10:19:53

+0

我把它放到config下的初始化程序中。例如,在'config/initializers/logger.rb'中:'if!Rails.env.development? Rails.logger = ActiveSupport :: BufferedLogger.new(Rails.root.join(“log”,“#{Rails.env} .log”)) end' 严重的是,如何在没有剪贴的情况下获得换行符在换行?如果我按下回车键则保存我的编辑。 – 2014-10-28 20:18:22