Delayed_job不再记录

时间:2013-06-10 20:23:28

标签: ruby-on-rails ruby-on-rails-3 logging delayed-job

出于某种原因,我的Rails应用程序不再将我的DelayedJob gem的活动记录到单独的日志(delayed_job.log)或主Rails开发日志中。我也在使用Workless gem,如果这是相关的。

过去常常这样说:

2013-06-07T19:16:25-0400: [Worker(delayed_job.workless host:MyNames-MacBook-Pro.local       pid:28504)] Starting job worker
2013-06-07T19:16:38-0400: [Worker(delayed_job.workless host:MyNames-MacBook-Pro.local pid:28504)] MyApp#scrape completed after 13.0290
2013-06-07T19:16:38-0400: [Worker(delayed_job.workless host:MyNames-MacBook-Pro.local pid:28504)] 1 jobs processed at 0.0761 j/s, 0 failed ...
2013-06-07T19:16:43-0400: [Worker(delayed_job.workless host:MyNames-MacBook-Pro.local pid:28504)] Exiting...

但任何日志中都没有出现任何内容。

如何确保DelayedJob活动记录到主开发日志?我不介意它是否也记录到一个单独的日志,但重要的是我在Mac的控制台中看到它的活动。

我已在线搜索此问题的答案(例如here,但没有任何效果。

这是我的delayed_job_config.rb :(在config / initializers中)

Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 2
Delayed::Worker.max_run_time = 20.minutes
Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.auto_flushing = true

如果您想从我的应用中获得更多代码,请告诉我们 - 我很乐意提供。非常感谢Rails新手。

1 个答案:

答案 0 :(得分:1)

我终于开始工作了。感谢Seamus Abshere对问题here的回答。我将他在下面发布的内容放在初始化文件中。这得到delayed_job登录到我的development.rb文件(huzzah!)。

但是,delayed_job仍然没有登录我的控制台(原因我还是不明白)。我通过打开一个新的控制台选项卡并输入tail -f logs/development.log来解决这个问题。

与Seamus所写的不同,auto-flushing=true在Rails 4中被弃用,我的Heroku应用程序崩溃了。我通过将其从初始化程序文件中删除并将其作为environments/development.rb放在我的config.autoflush_log = true文件中解决了这个问题。但是,我发现两种类型的冲洗都不是完成这项工作所必需的。

这是他的代码(没有自动刷新):

file_handle = File.open("log/#{Rails.env}_delayed_jobs.log", (File::WRONLY | File::APPEND | File::CREAT))
# Be paranoid about syncing
file_handle.sync = true
# Hack the existing Rails.logger object to use our new file handle
Rails.logger.instance_variable_set :@log, file_handle
# Calls to Rails.logger go to the same object as Delayed::Worker.logger
Delayed::Worker.logger = Rails.logger

如果上述代码无效,请尝试将Rails.logger替换为RAILS_DEFAULT_LOGGER