HerokuにRails3.2.6アプリがあり、DelayedJob2.1.4のワーカーdynoがあります。ローカルでワーカーを実行すると、問題は発生しません。しかし、Herokuで実行すると、動作が不安定になり、一部のジョブが失敗するようです。最初は、パターンはワーカーdynoがスピンダウンして戻ってくることと関係があると思いました。これは、数回試行した後、ジョブが再び機能し始めるためです。長く待つと、ジョブが失敗し始めます。しかし、ジョブ間のわずか5分で再びエラーが発生したため、スピンダウンと関係があるかどうかはわかりません。ただし、ジョブを互いに近くに保つと、正常に実行される可能性が高くなるようです。
エラーは次のとおりです。
irb(main):052:0> Delayed::Job.last.last_error
Delayed::Backend::ActiveRecord::Job Load (9.9ms) SELECT `delayed_jobs`.* FROM `delayed_jobs` ORDER BY `delayed_jobs`.`id` DESC LIMIT 1
=> "{Job failed to load: uninitialized constant FacebookTimelinePublisher. ...
この場合、安全対策のために自動ロードパスに含めFacebookTimelinePublisher
たディレクトリ内のPOROクラスです。app/publishers
あなたが持っているかもしれないどんな提案にも感謝します。
[アップデート]
Delayed::Job.enqueue
の代わりに使用するように遅延ジョブを設定する方法を変更しました#delay
。これにより、Delayed JobがJobクラスを正しく検出するという問題が前進しましたが、それ自体を初期化するときに、Railsモデルが検出されません。それでも、ジョブが問題なく実行されることがあるため、問題の「断続的な」性質は持続します。
"{Job failed to load: uninitialized constant ShareObject. Handler: \"--- !ruby/struct:FacebookTimelinePublisher \\nshare_object: !ruby/ActiveRecord:ShareObject \\n attributes: \\n ...."