web-dev-qa-db-ja.com

Sidekiqはキューを処理していません

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

何がうまくいかなかったのか、どうやって見つけることができますか?非表示のログファイルはありますか?

52
0x4a6f4672

その理由は、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を使用すると便利です。設定ファイルがロードされていない場合、設定ファイルで定義されているものはすべて無意味です。したがって、最初に正しい設定ファイルを使用していることを確認してください。

128
0x4a6f4672

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
6
Edgar Ortega

この問題が発生しました。 sidekiq.ymlで構文エラーが発生したことがわかりました

1
jellymann

私の場合、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') }
0
João Souza

しばらくの間、これでレンガの壁に頭をぶつけていました。私の問題は、sidekiqが新しいバージョンのredis-serverを必要とすることでした。 「bundle exec sidekiq」を実行すると、エラーが明らかになりました。 redis-serverの新しいバージョンに更新したら、問題ありませんでした。

0
Elliott

私の問題は、私が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
0
Hackeron