0

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  ...."
4

2 に答える 2

0

Heroku 環境についてはわかりませんが、初期化子でカスタム クラスを要求することで同様の問題を解決しました (delayed_job 構成初期化子を使用しました)。

require "#{Rails.root}/app/publishers/facebook_timeline_publisher.rb"

参照: Delayed::Job with modules

于 2012-12-12T05:45:43.187 に答える
0

問題は gem バージョンに関連していたようです。delayed_job 3.0.4 にアップグレードし、delayed_job_active_record (0.3.3) もインストールしたので、どちらが問題を解決したかはわかりませんが、すべてのジョブが正常に実行されるようになりました。

これが誰かに役立つことを願っています。

于 2012-12-14T04:26:08.220 に答える