Como limpar todos os trabalhos de sidekiq?


118

Estou usando o sidekiq para tarefas em segundo plano no aplicativo Rails. Agora o número de empregos aumenta, então quero eliminar todos os empregos. Eu tentei o seguinte comando no console

Sidekiq::Queue.new.clear

mas estava dando o seguinte erro.

NameError: uninitialized constant Sidekiq::Queue 

Como faço para limpar todos os trabalhos do sidekiq?


tentar include 'sidekiq'antes
Benj

@BenjaminSinclaire está dando TypeError: tipo de argumento incorreto String (módulo esperado)
Can Can

3
tente require 'sidekiq'antes
Uri Agassi

1
Eu sempre (realmente sempre) confundo incluir e exigir :)
Benj

Respostas:



206

Você pode fazer o que está escrito na questão 1077 ou conforme relatado neste blog em noobsippets

Ambos sugerem que façamos o seguinte, e pode ser feito no console do trilho:

Sidekiq.redis { |conn| conn.flushdb }


Isso parece redefinir minha autenticação nos aplicativos Rails que estou usando (o que significa que tenho que copiar os cookies de volta para o meu cliente HTTP). Existe uma maneira de evitar isso?
intcreator

1
Olá, Brandeamon. Você está usando o redis para controlar a sessão do seu projeto? Como esses comandos são para "limpar" todos os dados armazenados no redis, é equivalente a eliminar um banco de dados ou eliminar uma tabela em bancos de dados relacionais.
jonathanccalixto de

1
Esta deve ser a resposta aceita considerando seus votos.
M. Habib

Isso funciona de forma mais previsível do que redis-cli flushdbse você estiver executando o redis em um servidor separado do servidor Rails. Fiquei me perguntando por redis-cli flushdbque não funcionou até que lembrei que precisava incluir argumentos de host e porta.
maurício

4
O problema com essa abordagem é que, se você estiver compartilhando o mesmo redis / elasticache em serviços diferentes, todos os outros dados do redis db serão limpos também.
Charles Skariah

80

Comandos Clear Sidekiq Jobs:

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
Você também pode limpar todas as filas com Sidekiq::Queue.all.map(&:clear)... Útil quando você sincroniza seu banco de dados local com o prod 😅
escanxr 01 de

36

No último Sidekiq, basta explodi-lo:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Sim, o comando para limpar tudo é literalmente um emoji de bomba. Também funciona paraSidekiq::RetrySet .

Ou se você não é divertido, pode usar q.clear


1
OMG, o que diabos é isso? @Xavier, existe um método chamado .💣, você pode me orientar no documento sobre este método (💣).
codemilan

2
@codemilan Veja esta postagem do blog: blog.honeybadger.io/…
Modus Tollens

Eu comecei invalid byte sequence in US-ASCII (ArgumentError)a executar q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Você também pode usar redis-cli flushall


5
O problema com essa abordagem é se você estiver compartilhando o mesmo redis / elasticache em serviços diferentes, todos os outros dados no banco de dados também serão apagados.
Charles Skariah

13

Use Rails runner em uma linha

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'

10

Todas as tarefas do Sidekiq são salvas no "Redis".

Você pode limpar o "Redis" com este comando

redis-cli flushall

8

Você pode usar isso para limpar todos os trabalhos

require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)



0

Percebi que Sidekiq.redis { |conn| conn.flushdb }remove todas as chaves do banco de dados redis. Há uma maneira mais segura de limpar todas as filas sidekiq usando redis-cli:

redis-cli keys "*queue:*" | xargs redis-cli del

O mesmo pode ser alcançado com a API Sidekiq (veja a resposta de Ravi Prakash Singh )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.