Comment effacer tous les jobs de Sidekiq?


119

J'utilise sidekiq pour les tâches d'arrière-plan dans l'application Rails. Maintenant, le nombre d'emplois augmente, donc je veux effacer tous les emplois. J'ai essayé la commande suivante dans la console

Sidekiq::Queue.new.clear

mais il donnait l'erreur suivante.

NameError: uninitialized constant Sidekiq::Queue 

Comment effacer tous les jobs de sidekiq?


essayer include 'sidekiq'avant
Benj

@BenjaminSinclaire donne TypeError: mauvais type d'argument String (module attendu)
Can Can

3
essayer require 'sidekiq'avant
Uri Agassi

1
Je confond toujours (vraiment toujours) inclure et exiger :)
Benj

Réponses:



207

Vous pouvez faire ce qu'il dit sur le numéro 1077 ou comme indiqué dans ce blog à noobsippets

Les deux suggèrent que nous faisons ce qui suit, et peut être fait sur la console de rails:

Sidekiq.redis { |conn| conn.flushdb }


Cela semble réinitialiser mon authentification sur les applications Rails que j'utilise (ce qui signifie que je dois recopier les cookies dans mon client HTTP). Y a-t-il un moyen d'empêcher cela?
intcreator

1
Bonjour Brandeamon. Utilisez-vous redis pour contrôler la session de votre projet? Étant donné que ces commandes visent à «nettoyer» toutes les données stockées dans redis, cela équivaut à une suppression de base de données ou une suppression de table dans des bases de données relationnelles.
jonathanccalixto

1
Telle devrait être la réponse acceptée compte tenu de ses votes.
M. Habib

Cela fonctionne de manière plus prévisible que redis-cli flushdbsi vous exécutez redis sur un serveur distinct de votre serveur rails. Je me demandais pourquoi redis-cli flushdbcela ne fonctionnait pas jusqu'à ce que je me souvienne que je devais inclure des arguments d'hôte et de port.
maurice

4
Le problème avec cette approche est que si vous partagez le même redis / elasticache entre différents services, cela effacera également toutes les autres données de la base de données redis.
Charles Skariah

80

Effacer les commandes 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
Vous pouvez également effacer toutes les files d'attente avec Sidekiq::Queue.all.map(&:clear)... Utile lorsque vous synchronisez votre base de données locale avec le prod 😅
escanxr

36

À partir du dernier Sidekiq, faites-le exploser:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Oui, la commande pour tout effacer est littéralement un emoji de bombe. Fonctionne également pour Sidekiq::RetrySet.

Ou si vous n'êtes pas amusant, vous pouvez utiliser q.clear


1
OMG, qu'est-ce que c'est que ça? @Xavier, y a-t-il une méthode nommée .💣, pouvez-vous s'il vous plaît me guider la documentation sur cette méthode (💣).
codemilan

2
@codemilan Voir ce billet de blog: blog.honeybadger.io/…
Modus Tollens

J'ai commencé invalid byte sequence in US-ASCII (ArgumentError)à exécuter q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Vous pouvez aussi utiliser redis-cli flushall


5
Le problème avec cette approche est que si vous partagez le même redis / elasticache entre différents services, cela effacera également toutes les autres données de la base de données.
Charles Skariah

13

Utilisez Rails Runner sur une seule ligne

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

10

Toutes les tâches Sidekiq sont enregistrées dans "Redis".

Vous pouvez nettoyer "Redis" par cette commande

redis-cli flushall

8

Vous pouvez l'utiliser pour effacer tous les travaux

require 'sidekiq/api'

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



0

J'ai réalisé que cela Sidekiq.redis { |conn| conn.flushdb }supprime toutes les clés de la base de données redis. Il existe un moyen plus sûr d'effacer toutes les files d'attente sidekiq en utilisant redis-cli:

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

La même chose peut être obtenue avec l'API Sidekiq (voir la réponse de Ravi Prakash Singh )

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.