Sidekiq がキュー内のジョブの処理を妨げる可能性のある理由は何ですか?キューがいっぱいです。ログファイルsidekiq.log
は、アクティビティがないことを示します。したがって、キューはいっぱいですが、ログは空であり、Sidekiqはアイテムを処理していないようです。ワーカー処理ジョブはないようです。 Redisを再起動するか、 [〜#〜] flushall [〜#〜] または [〜#〜]でフラッシュしますflushdb [〜#〜] 効果なし。 Sidekiqが開始されました
bundle exec sidekiq -L log/sidekiq.log
次のログファイルを生成します。
2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in Ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop
何がうまくいかなかったのか、どうやって見つけることができますか?非表示のログファイルはありますか?
その理由は、Sidekiqが間違ったキューを探す可能性がある場合です。デフォルトでは、Sidekiqは「default」という名前のキューを使用します。 2つの異なるキュー名を使用し、config/sidekiq.ymlで定義しました
# configuration file for Sidekiq
:queues:
- queue_name_1
- queue_name_2
問題は、この設定ファイル自動的にロードされない単純なdatabase.yml
コマンドにより、開発環境ではデフォルトで(たとえば[thinking_sphinx.yml
]やbundle exec sidekiq
とは異なり)です。したがって、ジョブを2つの特定のキューに書き込み、Sidekiqは3番目のキュー(デフォルトのキュー)でジョブを待機していました。 -C
または--config
オプションを使用して、パラメーターとして構成ファイルへのパスを渡す必要があります。
bundle exec sidekiq -C ./config/sidekiq.yml
または、キュー名を直接渡すことができます(コンマの後にスペースを入れないでください):
bundle exec sidekiq -q queue_name_1,queue_name_2
問題を見つけるには、コマンドラインでオプション-v
または--verbose
を渡すか、:verbose: true
ファイルでsidekiq.yml
を使用すると便利です。設定ファイルがロードされていない場合、設定ファイルで定義されているものはすべて無意味です。したがって、最初に正しい設定ファイルを使用していることを確認してください。
config/sidekiq.yml
がある場合は、すべてのキューがそこに定義されていることを確認してください。このサンプルファイルを確認してください: https://github.com/mperham/sidekiq/blob/master/examples/config.yml =
コマンドラインまたはProcfileでキュー名を渡す場合、次のようなもの
bin/sidekiq -q queue1 -q queue2
bundle exec sidekiq -q queue1 -q queue2
すべてのキューがそこで定義されていることを確認してください。
キューの名前がわからない場合は、次のスクリプトでそれを把握できます。
require "sidekiq/api"
stats = Sidekiq::Stats.new
stats.queues
# {"production_mailers"=>25, "production_default"=>1}
次に、キューを使用して処理を実行できます。
queue = Sidekiq::Queue.new("production_mailers")
queue.count
queue.clear
この問題が発生しました。 sidekiq.ymlで構文エラーが発生したことがわかりました
私の場合、sidekiqは開発には問題ありませんでしたが、ステージングにはまりました。これは、カピストラーノのデプロイ構成に関する人為的なエラーでした。 Capkiでsidekiq.ymlのパスを誤って設定しました(現在ではなく共有)。
黙って失敗しました:
# Capfile
# WRONG:
set :sidekiq_config, -> { File.join(shared_path, 'config', 'sidekiq.yml') }
^^^^^^^^^^^
# RIGHT:
set :sidekiq_config, -> { File.join(current_path, 'config', 'sidekiq.yml') }
しばらくの間、これでレンガの壁に頭をぶつけていました。私の問題は、sidekiqが新しいバージョンのredis-serverを必要とすることでした。 「bundle exec sidekiq」を実行すると、エラーが明らかになりました。 redis-serverの新しいバージョンに更新したら、問題ありませんでした。
私の問題は、私がconfigure_serverを持っていたが、私のイニシャライザにconfigure_clientを持っていなかったことでした、あなたは両方を持っていなければなりません:
Sidekiq.configure_server do |config|
config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end
Sidekiq.configure_client do |config|
config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end