【问题标题】:Delayed::Job tasks not executing and don't clear from queue when they do runDelayed::Job 任务未执行且运行时未从队列中清除
【发布时间】:2014-12-11 06:42:42
【问题描述】:

我的 Delayed::Jobs 正在排队,但没有运行。当我在控制台中检查它们时,last_error 字段中没有错误,表明它们尚未运行。我可以使用some_job.invoke_job 在控制台中成功运行它们,但是在它们运行之后,它们并没有像应有的那样从队列中清除(它们过去常常在控制台中手动调用它们后清除)。

我正在运行delayed_job (4.0.4) 和Rails 4.1.4。这个问题似乎是在 gem 升级后出现的。

我已经多次重启了delayed_job服务器。

这是队列中的一个作业:

#<Delayed::Backend::ActiveRecord::Job id: 725, priority: 0, attempts: 0, handler: "--- !ruby/object:Delayed::PerformableMethod\nobject...", last_error: nil, run_at: "2014-10-16 01:52:11", locked_at: nil, failed_at: nil, locked_by: nil, queue: nil, created_at: "2014-10-16 01:52:11", updated_at: "2014-10-16 01:52:11">

如何让我的延迟::作业自动运行,并在它们完成运行后从队列中清除?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 backgroundworker delayed-job


    【解决方案1】:

    首先,确保您运行负责处理延迟作业的进程。您有两种选择:

    1. bin/delayed_job - 运行一个监听传入请求的守护进程。
    2. rake jobs:work - 在前台处理作业。

    您提到在控制台中使用Delayed::Job#invoke_job - 此方法处理作业,但它不会做任何其他事情,这就是您的作业没有从队列中删除的原因。

    对于运行作业然后从队列中删除成功的作业,您可以使用Delayed::Worker#run

    例如:

    some_job = Delayed::Job.find(job_id)
    Delayed::Worker.new.run(some_job) 
    

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 2017-12-15
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2011-10-02
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多