Question

J'utilise Resque sur un projet RAILS-3 pour gérer les travaux qui devraient fonctionner toutes les 5 minutes. J'ai récemment fait quelque chose qui a fait boule de neige la création de ces emplois et la pile a frappé plus de 1000 emplois. J'ai résolu le problème qui a fait que de nombreux emplois étaient en file d'attente et maintenant le problème que j'ai est que les travaux créés par le bogue sont toujours là et il devient donc difficile de tester quelque chose car un travail est ajouté à une file d'attente avec plus de 1000 emplois. Je n'arrive pas à arrêter ces emplois. J'ai essayé de retirer la file d'attente du redis-CLI en utilisant la commande flushall mais cela n'a pas fonctionné. Est-ce que je manque quelque chose? car je n'arrive pas à trouver un moyen de se débarrasser de ces emplois.

Était-ce utile?

La solution

Si vous ouvrez une console Rails, vous pouvez exécuter ce code pour effacer vos files d'attente:

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"

Autres conseils

Jouant sur les réponses ci-dessus, si vous devez effacer toutes vos files d'attente, vous pouvez utiliser ce qui suit:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }

Resque a déjà une méthode pour faire cela - essayez Resque.remove_queue(queue_name) (Voir la documentation ici). En interne, il fonctionne Resque.redis.del(), mais il fait aussi d'autres nettoyages, et en utilisant une méthode API (plutôt que de faire des hypothèses sur le fonctionnement de la resque), vous serez plus à l'épreuve des avenir.

Tâche de Rake mise à jour pour la compensation (selon les dernières modifications des commandes Redis): https://gist.github.com/1228863

C'est ce qui fonctionne maintenant:

Resque.remove_queue("...")

Entrez la console Redis:

redis-cli

Liste des bases de données:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue" - DB dont vous avez besoin.

Puis courez:

DEL resque:queue:your_overloaded_queue

Ou si vous souhaitez supprimer des travaux spécifiés dans la file d'attente, indiquez quelques valeurs de DB avec LRANGE commande:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

Puis copiez / collez une valeur à LREM commande:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

Où 5 - Nombre d'éléments à supprimer.

Il est plus sûr et à l'épreuve des balles d'utiliser l'API Resque plutôt que de tout supprimer sur le redis de la resque. Resque fait un peu de nettoyage à l'intérieur.

Si vous voulez supprimer tout files d'attente et emplois en file d'attente associés:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

Les files d'attente seront recréées la prochaine fois qu'un emploi sera en cours.

Documentation

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top