我已将Resque添加到我的Rails 3项目中。我创建了一个从DB读取/写入一些内容的工作。记录Resque的问题
问题是我没有看到SQL查询日志,如“Post Load(0.5ms)SELECT”posts“。* FROM”posts“”in the terminal again。我也没有看到我设置的任何Rails.logger消息。
当我发出另一个请求(简单刷新)时,记录器消息和SQL查询日志突然出现。
任何想法可能会发生什么?谢谢
我已将Resque添加到我的Rails 3项目中。我创建了一个从DB读取/写入一些内容的工作。记录Resque的问题
问题是我没有看到SQL查询日志,如“Post Load(0.5ms)SELECT”posts“。* FROM”posts“”in the terminal again。我也没有看到我设置的任何Rails.logger消息。
当我发出另一个请求(简单刷新)时,记录器消息和SQL查询日志突然出现。
任何想法可能会发生什么?谢谢
Rails不会立即写入日志文件,它会在刷新文件之前等待一定数量的行。你可以告诉Rails总是加给你的development.rb
或application.rb
文件清空日志...
config.logger.auto_flushing = true
永远只能做到这一点的发展,从来没有这种生产,因为它会杀了你的I/O 。
你也可以做到这一点与需求...
Rails.logger.flush
这里API文档...
http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#method-i-auto_flushing-3D
Resque将不刷新记录的生产模式(除非你的作业正在生成超过1000行日志)。
您将不得不刷新生成的每一行日志。我只配置resque与文件的lib /任务/ resque.rake:
task "resque:setup" => :environment do
Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 }
end
我们经历了同样的问题,在我们的项目之一。此外,我们还想将所有Resque消息记录到单独的日志文件中。
在博客文章Enable immediate log messages of resque workers中,可以找到一个代码示例以启用立即记录到单独的文件。
ActiveSupport :: BufferedLogger#auto_flushing现在已在Rails 3.2上被弃用。说明是在底层文件句柄上设置同步级别,或者调整文件系统。 FS缓存现在控制着冲洗。 file = File.open('foo.log','w') file.sync = true ActiveSupport :: BufferedLogger.new文件 – plainjimbo
格式化非常麻烦,你可以在文档“弃用”部分 - https://github.com/lifo/docrails/blob/master/railties/guides/source/3_2_release_notes.textile – plainjimbo
@Jimbo - 该弃用邮件的问题是,我不知道“设置底层文件句柄同步级别“的含义。 –