0

出于某种原因,我的 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 控制台中看到它的活动。

我已经在网上搜索了这个问题的答案(比如这里,没有任何效果。

这是我的delayed_job_config.rb:(在配置/初始化程序中)

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 新手。

4

1 回答 1

1

我终于让这个工作了。多亏了 Seamus Abshere 对这里问题的回答。我将他在下面发布的内容放在初始化文件中。这让 delay_job 登录到我的 development.rb 文件(huzzah!)。

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

但是,与 Seamus 所写的不同,auto-flushing=trueRails 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.loggerRAILS_DEFAULT_LOGGER.

于 2013-06-13T19:00:23.683 回答