Sidekiqを使用するアプリケーションがあります。 WebサーバープロセスによってSidekiqにジョブが配置されることがありますが、必ずしもワーカーを実行しているとは限りません。 Railsコンソールから呼び出すことができるユーティリティはありますか?Redisキューから1つのジョブを引き出し、適切なSidekiqワーカーを実行しますか?
SidekiqのAPIをハッキングしてジョブを手動で実行しようとはしません。これは、不要な内部状態が残る可能性があるためですが、次のコードは機能すると思います。
# Fetch the Queue
queue = Sidekiq::Queue.new # default queue
# OR
# queue = Sidekiq::Queue.new(:my_queue_name)
# Fetch the job
# job = queue.first
# OR
job = queue.find do |job|
meta = job.args.first
# => {"job_class" => "MyJob", "job_id"=>"1afe424a-f878-44f2-af1e-e299faee7e7f", "queue_name"=>"my_queue_name", "arguments"=>["Arg1", "Arg2", ...]}
meta['job_class'] == 'MyJob' && meta['arguments'].first == 'Arg1'
end
# Removes from queue so it doesn't get processed twice
job.delete
meta = job.args.first
klass = meta['job_class'].constantize
# => MyJob
# Performs the job without using Sidekiq's API, does not count as performed job and so on.
klass.new.perform(*meta['arguments'])
# OR
# Perform the job using Sidekiq's API so it counts as performed job and so on.
# klass.new(*meta['arguments']).perform_now
これがうまくいかない場合、または誰かがこれを行うためのより良い方法を知っている場合は、私に知らせてください。