我想调试一个延迟的作业类。首先,我添加了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日志中没有显示任何内容。有谁有什么想法吗?
发布于 2010-10-28 06:41:28
我幸运地将错误的回溯记录呈现给了一封电子邮件,这至少给了我一些关于延迟作业何时失败/如何失败的背景信息:
下面是一个示例:
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如果您只想为延迟的::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)结束
发布于 2010-10-28 04:45:00
你有没有试过缩小范围,看看是延迟的作业没有被解雇还是记录器配置对你不起作用?如果将logger.debug调用替换为puts会怎么样?
https://stackoverflow.com/questions/4035582
复制相似问题