我正在寻找调试延迟工作的课程。首先,我添加了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


日志中未显示任何内容。有人有主意吗?

最佳答案

我很乐意将错误的回溯信息发送到电子邮件,这至少为我提供了有关延迟工作何时/如何失败的一些背景信息:

这是一个例子:

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如何处理这些结果。这是我如何使用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)


结束

10-01 23:03