我正在调试延迟的工作类。首先,我添加了config / initializers / delayed_job_config,将我的日志记录移动到我的log / production.rb文件中。
Delayed::Job.destroy_failed_jobs = false
Delayed::Worker.logger = Rails.logger
然后在我在实际文件中的实际文件中
class TestJob < Struct.new()
logger.debug("test logging")
end
日志中没有显示任何内容。有人有什么想法吗?
答案 0 :(得分:2)
我很幸运将错误的回溯归结为电子邮件,这至少给了我一些关于延迟工作失败的时间/方式的背景信息:
以下是一个例子:
result = Delayed::Job.work_off
unless result[1].zero?
ExceptionMailer.deliver_exception_message("[Delayed Job Failed] Error id: #{Delayed::Job.last.id}", Delayed::Job.last.last_error)
end
如果你只是想为你的延迟::工作任务编写测试,这就是我采取的方法。我将根据各种场景的期望来完成执行任务,然后测试Delayed :: Job如何处理这些结果。以下是我每晚使用Delayed :: Job与远程CMS同步的示例。
it "should sync content from the remote CMS" do
CMSJobs::Sync.module_eval do
def perform
url.should == "http://someurl.com/tools/datafeed/resorts/all"
Resort.sync_resorts!([{'id' => 1, 'name' => 'resort foo'}, { 'id' => 2, 'name' => 'resort bar' }])
end
end
lambda do
Resort.sync_all!
end.should change(Delayed::Job, :count)
lambda do
Delayed::Job.work_off
end.should change(Resort, :count).by(2)
# It should now delete a resort if it doesn't appear in the next CMS feed.
lambda do
Resort.sync_resorts!([{ 'id' => 2, 'name' => 'resort bar' }])
end.should change(Resort, :count).by(-1)
端
答案 1 :(得分:-1)
您是否尝试将其缩小至延迟作业未被解雇或记录器配置不适合您的问题?如果用puts?
替换logger.debug调用怎么办?