1. ホーム
  2. ruby-on-rails

[解決済み] Sidekiqのキューに何が入っているかを見たり、キューをクリアするためのコンソールコマンドはありますか?

2022-11-19 01:01:17

質問

私は、キューに何があるかを見るためにコンソールに行く方法と、必要なときにキューをクリアすることの容易さのためにdelayed_jobsを使用することに慣れています。 このためにSidekiqに同様のコマンドがありますか? ありがとうございます!

どのように解決するのですか?

Sidekiqを使ったことがないので、キューに入ったジョブを見るだけのメソッドがあるのかもしれませんが、Sidekiq(とResque)は基本的にそれしかないので、本当にRedisコマンドのラッパーに過ぎないのでしょう。

# See workers
Sidekiq::Client.registered_workers

# See queues
Sidekiq::Client.registered_queues

# See all jobs for one queue
Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }

# See all jobs in all queues
Sidekiq::Client.registered_queues.each do |q|
  Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
end

# Remove a queue and all of its jobs
Sidekiq.redis do |r| 
  r.srem "queues", "app_queue"
  r.del  "queue:app_queue"
end

残念ながら、特定のジョブを削除することは、その正確な値をコピーしなければならないので、少し難しくなります。

# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }

このようなことがもっと簡単にできるのは redis-cli :

$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queues:app_queue 0 -1
> lrem queues:app_queue -1 "payload"