出于某种原因,我的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新手。
答案 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
。