延迟作业:如何检索和更新预定作业?

时间:2012-05-29 18:44:46

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

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

1 个答案:

答案 0 :(得分:4)

您可以简单地处理Delayed :: Job模型(如果使用delayed_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