2

我正在使用延迟作业在特定时间异步执行作业。这是在我的模型类中指定的。现在我需要弄清楚如何重新安排工作,以防我需要重新安排工作。如果我可以在我的模型上有一个方法来检索作业并更新 run_at 时间,那就太好了。我怎么能用延迟工作做到这一点?

4

1 回答 1

4

您可以简单地处理 Delayed::Job 模型(如果您使用 delay_job_active_record,则说 activerecord)

问题是你想找回什么工作,以及你如何处理它。无论您如何管理作业以供以后检索,您都应该使用以下内容:

# submit the job and remember id
job_id_remember_for_later = Delayed::Job.enqueue(job).id
#...
# later
job = Delayed::Job.find_by_id(job_id_remember_for_later)
job.update_attributes(:run_at => new_time, :attempts => 0)
job.save

这段代码肯定是不安全的,你需要检查锁等。还要注意你需要配置delayed_job来保留失败的作业(默认在max_attempts失败后删除)。

Delayed::Worker.destroy_failed_jobs = false
于 2012-05-29T19:32:21.383 回答