103

私は、コンソールにアクセスしてキューに何が入っているかを確認するdelayed_jobsメソッドを使用し、必要に応じてキューを簡単にクリアすることに慣れています。これに対してSidekiqに同様のコマンドはありますか? ありがとう!

4

9 に答える 9

93

私は 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"
于 2012-10-02T05:25:32.680 に答える
8

ワーカー、キュー、およびジョブに関するリアルタイム情報にアクセスするための API があります。
ここにアクセスしてください https://github.com/mperham/sidekiq/wiki/API

于 2013-10-24T07:51:36.100 に答える
2
$ 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 queue:queue_name 0 -1 # (queue_name must be your relevant queue)
> lrem queue:queue_name -1 "payload"
于 2016-06-24T06:35:33.560 に答える
2

デフォルトのキューには吊るされた「ワーカー」があり、Web インターフェースから見ることができました。しかし、Sidekiq::Queue.new.size を使用した場合、コンソールからは利用できませんでした

irb(main):002:0> Sidekiq::Queue.new.size
2014-03-04T14:37:43Z 17256 TID-oujb9c974 INFO: Sidekiq client with redis options {:namespace=>"sidekiq_staging"}
=> 0

redis-cli を使用して、それらを見つけることができました

redis 127.0.0.1:6379> keys *
    1) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672483440:default"
    2) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:0cf585f5e93e1850eee1ae4613a08e45-70328697677500:default:started"
    3) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672320140:default:started"
    ...

解決策は次のとおりです。

irb(main):003:0>  Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1

また、Sidekiq v3にはコマンドがあります

Sidekiq::Workers.new.prune

でもなぜかその日はうまくいかなかった

于 2014-03-04T14:52:40.123 に答える
2

回避策は、テスト モジュール (「sidekiq/testing」が必要) を使用し、ワーカー (MyWorker.drain) を排出することです。

于 2012-12-13T20:16:12.083 に答える
2

sidekiq の再試行キューをクリアする場合は、次のようにします。Sidekiq::RetrySet.new.clear

于 2014-05-10T04:02:18.640 に答える
1

すべての sidekiq キューをクリアするための Rake タスク:

namespace :sidekiq do
  desc 'Clear sidekiq queue'
  task clear: :environment do
    require 'sidekiq/api'
    Sidekiq::Queue.all.each(&:clear)
  end
end

使用法:

rake sidekiq:clear
于 2015-08-26T13:36:33.277 に答える