Ruby on Rails 3 - 如何调试不返回成功或失败的延迟::Worker.work_off



我正在使用Rspec测试延迟::作业。

在我的rspec_controller:中

  it "queues up delayed job and fires" do
    setup        
    expect {
    post :create, {:job => valid_attributes}
    }.to change(Delayed::Job, :count).by(2)     
    Delayed::Worker.new.work_off.should == [2,0]
  end

Delayed::Job.count按预期通过,但Delayed::Worker.new.work_off返回[0,0],表示当有2个作业时,有0个成功,0个失败。

我应该如何调试以找出为什么work_off没有激发作业。

编辑:应该运行的两个作业将其run_at设置为未来。work_off是否会解雇那些本不应该立即完成的工作?

尽管这可能是一个较老的问题,但有一个参数没有太多文档记录,请尝试使用

Delayed::Worker.new(quiet: false).work_off

为了调试后台作业的结果,这可以帮助您发现它们应该在未来运行的事实是否干扰了断言本身。

编辑:完成后不要忘记去掉"quiet:false",否则您的测试将始终输出后台作业的结果。

构造

Delayed::Worker.new.work_off

立即处理DJ队列中的所有内容,并且与调用者在同一个线程中(它不会生成单独的工作线程)。但这并不能解释为什么你没有得到[2,0]的结果。

要回答您最初的问题"我应该如何调试以找出work_off为什么不解雇作业?",我建议您使用回调挂钩来跟踪作业的生命周期。如果需要向您展示如何操作,请添加注释…:)

相关内容

  • 没有找到相关文章

最新更新