web-dev-qa-db-ja.com

railsのすべての遅延ジョブを破棄する

Rails 2.3.8にcollectiveideaを使用しています。いくつかのタスクを実行するために一連の遅延ジョブを作成しています。しばらくしてから、実行中のすべての遅延ジョブを破棄したいと思います。これを行う方法は私を助けてください。

31
Rahul Tapali

これを解決するには、README delay_job GitHubページ を読むだけです:

Rake jobs:clearを呼び出して、キュー内のすべてのジョブを削除できます。

57
Lee Jarvis

Rakeタスクに加えて、DelayedJobジョブは通常のActiveRecordモデルにすぎないため、Rubyコードを使用している場合は、次のようにしてジョブを実行できます。

Delayed::Job.destroy_all
Delayed::Job.delete_all
Delayed::Job.find(4).destroy
# etc.
45
Ryan Brunner

一連のジョブが特定の時間内に完了しない場合にタイムアウトを要求する親プロセスがあるようです。ジョブ自体への参照に依存する代わりに、プロセスが中止したことを示すフラグをモデルに設定します。ジョブはそのフラグをチェックし、不要になった場合は短絡することができます。 (Jobクラスは、#performメソッドの内容もタイムアウトでラップする必要があります。)

あなたが提案しているように思われるように、DJオブジェクトへの参照にこだわることを試みることはほとんど常に悪い考えです。

0
betamatt