【问题标题】:How do I debug a Delayed::Worker.work_off that doesn't return success or failure如何调试不返回成功或失败的 Delayed::Worker.work_off
【发布时间】:2013-01-25 14:23:29
【问题描述】:

我正在使用 Rspec 测试我的 Delayed::Job。

在我的 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个job时成功0次,失败0次。

我应该如何调试以找出为什么 work_off 没有解雇这些工作。

编辑:应该运行的 2 个作业,将它们的 run_at 设置为未来。 work_off 是否会解雇不应该立即执行的工作?

【问题讨论】:

    标签: ruby-on-rails-3 rspec delayed-job


    【解决方案1】:

    虽然这可能是一个较老的问题,但有一个参数记录不多,请尝试使用

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

    要调试后台作业的结果,这可以帮助您确定它们应该在未来运行的事实是否与断言本身混淆。

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

    【讨论】:

      【解决方案2】:

      结构

      Delayed::Worker.new.work_off
      

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

      要回答您最初的问题“我应该如何调试以找出 work_off 不触发作业的原因?”,我建议您使用回调挂钩来跟踪作业的生命周期。如果需要向您展示如何操作,请添加评论... :)

      【讨论】:

      • 我在我的测试用例中使用了 Delayed::Worker.new(options).work_off。但突然它停止工作了。我该如何调试它?
      猜你喜欢
      • 2021-01-18
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多