しばらく調べていた問題があり、それを理解できません...どんな助けも大歓迎です。
Heroku で redis、resque、resque-scheduler を実行しています。スケジュールされたジョブの多くは実行されません。/resque/failed Web ページには、レールがワーカー プロセスにロードされなかったことを示すエラーが表示されます。エラーの多くは、/resque/failed ページの一覧には表示されません。ただし、何度も実行するジョブ。
また、/resque/workers には、Heroku で実行しているよりも多くのワーカーが表示されます。これを説明することはできません。Rails コンソールからワーカーを強制終了し、Heroku ワーカーを再起動すると、すべて問題ないように見えますが、最終的に /resque/workers ページにさらに多くのワーカーが表示されます。注: これらのワーカーは、Heroku の再起動 (24 時間ごとに行われます) の結果として表示されるわけではありません。3 番目のワーカー (Heroku で 2 を実行) の出現を見た後、「heroku ps」を実行しました。7時間。
resque-scheduler が待機中および準備完了のワーカー プロセスと通信するために使用するメカニズムが何らかの形で壊れていると思われます。そして、追加のワーカーは、resque メカニズムによってまだ「認識」されている機能していない Rails プロセスです (つまり、これらの機能していないワーカーのエントリが Redis に存在します)。
詳細: - /resque/workers Web ページに 6 個のワーカーが表示されていることに気付きました。そのため、Rails コンソールを使用してすべてのワーカーを削除しました。次に、Heroku でワーカーを再起動しました。それでも何も起こらなかったので、Heroku で resque-scheduler プロセスを再起動しました。まだ変更はありませんが、/resque/workers ページには正しい数の resque ワーカー (heroku ワーカー プロセスの数と一致する数) が表示されます。- 約 12 時間後、/resque/workers ページにさらに多くのワーカーが表示されることに気付きました。なんてこと?-一部のジョブは処理されますが、これらは各ワーカーの完了した合計に表示されます (つまり、すべてのワーカーがゼロ以外の num_processed 値を示します)。-ワーカーが時々実行されることを示すログが表示されます。
ここに明らかな問題がありますか?誰かが resque ワーカーと通信する resque-scheduler に関連する Redis のキー/エントリ構造を説明できますか? resque は ruby 1.9.2 と互換性がなくなったことに気付きましたが、問題が断続的であるため、それが原因とは考えられません。そして、私たちは resque の v. 2 ではなく v. 1 を使用していることに気付きました。
私はこの似たような問題を読みました: Resque on Heroku cedar stack Worker count still exists after the worker terminatesしかし、それは私の問題ではありません (コマンドラインで ENV 変数を heroku ワーカー/別名 resque ワーカー プロセスに渡さないため)。
これに関連している可能性がありますが: https://github.com/resque/resque/issues/319#issuecomment-1789239ワーカーの rake タスク コマンド ラインに ENV 変数を渡しません。
エラーとログ情報:
resque-scheduler によってスケジュール/キューに入れられたすべてのジョブについて、それが実行され、正しい時間に実行されていることを示すログ エントリが表示されます。次に例を示します。
2014-12-08T22:50:00.120565+00:00 app[scheduler.1]: [INFO] 2014-12-08 22:50:00 +0000: queueing CitrixWorker (CitrixWorker)
2014-12-08T22:50:00.127388+00:00 app[scheduler.1]: [INFO] 2014-12-08 22:50:00 +0000: queueing InstagramFeed (InstagramFeed)
2014-12-08T22:50:00.124540+00:00 app[scheduler.1]: [INFO] 2014-12-08 22:50:00 +0000: queueing PageSync (PageSync)
ほとんどの場合、ワーカーが走っているのを見たことはありません。時々私はします(再び、ログから):
2014-12-08T22:50:00.367083+00:00 app[worker.3]: DEBUG CitrixWorker.update_webinars: starting at 2014-12-08 22:50:00 +0000
/resque/failed のエラー例: Exception NameError Error uninitialized constant WorkerProcess => resque ワーカー プロセスで Rails がロードされていない (またはロードされていない) ことを示します。
環境とバージョン:
Ruby 1.9.2
Rails 3.1.11
the workers and resque-scheduler all run as Heroku Dynos.
宝石: redis-3.0.6 resque-1.25.1 resque-scheduler-2.3.1
Procfile (Heroku で使用): web: bin/start-nginx bundle exec unicorn --env $RACK_ENV -c ./config/unicorn.rb worker: bundle exec rake jobs:work scheduler: bundle exec rake resque:scheduler
ワーカーのレーキ タスク:
resque.rake:
require 'resque/tasks'
require 'resque/server'
require 'resque_scheduler/tasks'
desc 'Called by the resque:work rake task to initialize each worker process (I think)'
task "resque:setup" => :environment do
ENV['QUEUE'] = '*' # watch one or all queues (priority of these queues is in alphabetical order when * is specified)
ENV['INTERVAL'] = '1.0' # lower from default 5 second wait time (polling frequency) 5 gives same erroneous results as 1 second
puts "INFO: waiting on #{ENV['QUEUE'] == '*' ? 'ALL' : ENV['QUEUE']} Resque queues".info
end
desc "Alias for resque:work (To run workers on Heroku using standard worker syntax, which is 'rake jobs:work')"
task "jobs:work" => "resque:work"
-- マイク・パッパー