2011-06-28 55 views
6

我已将Resque添加到我的Rails 3项目中。我创建了一个从DB读取/写入一些内容的工作。记录Resque的问题

问题是我没有看到SQL查询日志,如“Post Load(0.5ms)SELECT”posts“。* FROM”posts“”in the terminal again。我也没有看到我设置的任何Rails.logger消息。

当我发出另一个请求(简单刷新)时,记录器消息和SQL查询日志突然出现。

任何想法可能会发生什么?谢谢

回答

4

Rails不会立即写入日志文件,它会在刷新文件之前等待一定数量的行。你可以告诉Rails总是加给你的development.rbapplication.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

+1

ActiveSupport :: BufferedLogger#auto_flushing现在已在Rails 3.2上被弃用。说明是在底层文件句柄上设置同步级别,或者调整文件系统。 FS缓存现在控制着冲洗。 file = File.open('foo.log','w') file.sync = true ActiveSupport :: BufferedLogger.new文件 – plainjimbo

+0

格式化非常麻烦,你可以在文档“弃用”部分 - https://github.com/lifo/docrails/blob/master/railties/guides/source/3_2_release_notes.textile – plainjimbo

+0

@Jimbo - 该弃用邮件的问题是,我不知道“设置底层文件句柄同步级别“的含义。 –

0

Resque将不刷新记录的生产模式(除非你的作业正在生成超过1000行日志)。

您将不得不刷新生成的每一行日志。我只配置resque与文件的lib /任务/ resque.rake:

task "resque:setup" => :environment do 
    Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 } 
end 
2

我们经历了同样的问题,在我们的项目之一。此外,我们还想将所有Resque消息记录到单独的日志文件中。

在博客文章Enable immediate log messages of resque workers中,可以找到一个代码示例以启用立即记录到单独的文件。