J'utilise Resque sur un projet Rails-3 pour gérer les travaux dont l'exécution est planifiée toutes les 5 minutes. J'ai récemment fait quelque chose qui a fait boule de neige pour la création de ces emplois et la pile a atteint plus de 1000 emplois. J'ai corrigé le problème qui entraînait la mise en file d'attente de nombreux travaux. Le problème que j'ai maintenant est que les travaux créés par le bogue sont toujours présents. Il est donc difficile de tester quelque chose puisqu'un travail est ajouté à une file d'attente comptant plus de 1000 travaux. Je n'arrive pas à arrêter ces emplois. J'ai essayé de supprimer la file d'attente de redis-cli à l'aide de la commande flushall mais cela n'a pas fonctionné. Est-ce que je manque quelque chose? parce que je n'arrive pas à trouver un moyen de me débarrasser de ces emplois.
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}"
En jouant avec les réponses ci-dessus, si vous devez effacer toutes vos files d'attente, vous pouvez utiliser les éléments suivants:
Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
Resque a déjà une méthode pour cela: essayez Resque.remove_queue(queue_name)
(voir la documentation ici ). En interne, il exécute Resque.redis.del()
, mais il effectue également d'autres opérations de nettoyage. En utilisant une méthode api (plutôt que de faire des suppositions sur le fonctionnement de resque), vous serez plus sûr de l'avenir.
Tâche de rake mise à jour pour effacer (en fonction des dernières modifications apportées aux commandes redis): https://Gist.github.com/1228863
C'est ce qui fonctionne maintenant:
Resque.remove_queue("...")
Entrez redis console:
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 lancez:
DEL resque:queue:your_overloaded_queue
Ou si vous souhaitez supprimer des travaux spécifiés dans la file d'attente, répertoriez quelques valeurs de la base de données avec LRANGE
command:
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\":[]}"
Ensuite, copiez/collez une valeur dans LREM
command:
127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5
Où 5 - nombre d'éléments à supprimer.
Utiliser l'API Resque plutôt que de tout supprimer sur Redis de Resque est plus sûr et plus sûr. Resque fait quelques travaux de nettoyage à l'intérieur.
Si vous souhaitez supprimer toutes les files d'attente et les tâches associées associées:
Resque.queues.each {|queue| Resque.remove_queue(queue)}
Les files d'attente seront recréées lors de la prochaine mise en file d'attente d'un travail.