Domanda

Sto usando Resque su un progetto rails-3 per gestire i lavori che sono programmati per essere eseguiti ogni 5 minuti.Recentemente ho fatto qualcosa che ha fatto impazzire la creazione di questi posti di lavoro e lo stack ha raggiunto oltre 1000 posti di lavoro.Ho risolto il problema che causava la messa in coda di molti lavori e ora il problema che ho è che i lavori creati dal bug sono ancora presenti e quindi diventa difficile testare qualcosa poiché un lavoro viene aggiunto a una coda con oltre 1000 lavori. Non riesco a fermare questi lavori.Ho provato a rimuovere la coda dal redis-cli usando il comando flushall ma non ha funzionato.Mi sto perdendo qualcosa?perché non riesco a trovare un modo per sbarazzarmi di questi lavori.

È stato utile?

Soluzione

Se apri una console rails, puoi eseguire questo codice per cancellare le code:

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

Altri suggerimenti

Giocando con le risposte precedenti, se hai bisogno di cancellare tutte le tue code, potresti usare quanto segue:

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

Resque ha già un metodo per farlo: prova Resque.remove_queue(queue_name) (consulta la documentazione qui ).Internamente esegue Resque.redis.del(), ma esegue anche altre operazioni di pulizia e utilizzando un metodo api (invece di fare ipotesi su come funziona resque) sarai più a prova di futuro.

Attività rake aggiornata per la cancellazione (in base alle ultime modifiche ai comandi redis): https://gist.github.com/1228863

Questo è ciò che funziona ora:

Resque.remove_queue("...")

Accedi alla console redis:

redis-cli

Elenca database:

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 di cui hai bisogno.

Quindi esegui:

DEL resque:queue:your_overloaded_queue

Oppure, se desideri eliminare i lavori specificati in coda, elenca alcuni valori da db con il comando LRANGE :

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\":[]}"

Quindi copia / incolla un valore nel comando LREM :

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

Dove 5 - numero di elementi da rimuovere.

È più sicuro e a prova di proiettile utilizzare l'API Resque piuttosto che eliminare tutto sul Redis di Resque.Resque fa un po 'di pulizia all'interno.

Se desideri rimuovere tutte le code e i lavori accodati associati:

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

Le code verranno ricreate la prossima volta che un lavoro viene accodato.

Documentazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top