2

遅延ジョブを使用して、特定の時間に非同期でジョブを実行しています。これは私のモデルクラスで指定されています。次に、ジョブのスケジュールを変更する必要がある場合に備えて、ジョブを取得する方法を理解する必要があります。モデルにジョブを取得して run_at を更新するメソッドがあればいいのですが。遅延ジョブでこれを行うにはどうすればよいですか?

4

1 に答える 1

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
于 2012-05-29T19:32:21.383 に答える