我已将 Resque 添加到我的 Rails 3 项目中。我创建了一个从/向数据库读取/写入一些东西的工作。
问题是我不再在终端中看到 SQL 查询日志,例如“Post Load (0.5ms) SELECT "posts".* FROM "posts""。我也没有看到我设置的任何 Rails.logger 消息。
当我发出另一个请求(简单刷新)时,记录器消息和 SQL 查询日志突然出现。
任何想法可能会发生什么?谢谢
我已将 Resque 添加到我的 Rails 3 项目中。我创建了一个从/向数据库读取/写入一些东西的工作。
问题是我不再在终端中看到 SQL 查询日志,例如“Post Load (0.5ms) SELECT "posts".* FROM "posts""。我也没有看到我设置的任何 Rails.logger 消息。
当我发出另一个请求(简单刷新)时,记录器消息和 SQL 查询日志突然出现。
任何想法可能会发生什么?谢谢
Rails 不会立即写入日志文件,它会在刷新文件之前等待一定数量的行。您可以通过将其添加到您的development.rb
orapplication.rb
文件来告诉 Rails 始终刷新日志...
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 消息记录到单独的日志文件中。
在博客文章启用 resque workers 的即时日志消息中,可以找到一个代码示例来启用即时日志记录到单独的文件。
Resque 不会在生产模式下刷新日志(除非您的工作生成超过 1000 行日志)。
您必须为生成的每一行日志刷新。我只会使用文件 lib/tasks/resque.rake 配置 resque :
task "resque:setup" => :environment do
Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 }
end