2

Rails 3.2.8、delayed_job (3.0.3)、delayed_job_active_record (0.3.3)。WEBrickを使用。

起動時にキャッシュを非同期に設定する初期化子があります。

MyModel.delay.get_lots_of_records
MyModel.delay.get_some_other_records
MyOtherModel.delay.get_tons_of_records
MyOtherModel.delay.get_some_other_records

開発環境では、delayed_job ログとキャッシュ ログによって証明されるように、これは正常に機能します。

ただし、ステージングでは、これらのジョブが 1 つまたは 2 つ実行されることもあれば、まったく実行されないこともあります。通常、少なくとも 1 つ、通常は同じもの (常にではありません) が実行されます。起動後にdelayed_jobsテーブルを見ると、4つのジョブがすべて書き込まれ、2秒後に消えることがわかります.

ここの推奨に従って、私は持っています

# config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false

しかし、ジョブは失敗したり実行されたりすることなく、非常に迅速に削除されています。

にブレークポイントを挿入するDelayed::PerformableMethod.performと、ジョブが実際に実行された場合にのみそのメソッドが呼び出されることがわかります。問題はその上流にあります。ただし、destroyメソッドは afterperformで呼び出されるため、何が起こっているのかわかりません。

トラブルシューティングの推奨事項または追加の診断アクションを探しています。

4

1 に答える 1

1

ひそかに:ステージング環境と同時にジョブを実行していた同じDBを指す、別の環境で実行されているワーカーがありました。この意図しない結果は、環境間で DB を決して共有しない正当な理由です。

于 2012-10-31T17:50:52.180 に答える