Pergunta

Estou usando o Resque em um projeto rails-3 para lidar com trabalhos que estão programados para serem executados a cada 5 minutos.Recentemente, fiz algo que gerou uma bola de neve na criação desses empregos e a pilha atingiu mais de 1000 empregos.Corrigi o problema que fazia com que muitos trabalhos fossem enfileirados e agora o problema que tenho é que os trabalhos criados pelo bug ainda estão lá e, portanto, fica difícil testar algo porque um trabalho é adicionado a uma fila com mais de 1000 trabalhos. Não consigo parar esses trabalhos.Tentei remover a fila do redis-cli usando o comando flushall, mas não funcionou.Estou esquecendo de algo?coz Não consigo encontrar uma maneira de me livrar desses empregos.

Foi útil?

Solução

Se você abrir um console Rails, poderá executar este código para limpar sua (s) fila (s):

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

Outras dicas

Jogando com as respostas acima, se você precisar limpar todas as suas filas, você pode usar o seguinte:

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

Resque já tem um método para fazer isso - tente Resque.remove_queue(queue_name) (veja a documentação aqui ).Internamente, ele executa Resque.redis.del(), mas também faz outra limpeza e, usando um método api (em vez de fazer suposições sobre como funciona o resque), você estará mais preparado para o futuro.

Tarefa rake atualizada para limpeza (de acordo com as últimas alterações dos comandos do redis): https://gist.github.com/1228863

Isso é o que funciona agora:

Resque.remove_queue("...")

Entre no console do redis:

redis-cli

Listar bancos de dados:

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 que você precisa.

Em seguida, execute:

DEL resque:queue:your_overloaded_queue

Ou se você deseja excluir os trabalhos especificados na fila, liste alguns valores do db com o 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\":[]}"

Em seguida, copie / cole um valor no comando LREM :

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

Onde 5 - número de elementos a serem removidos.

É mais seguro e à prova de balas usar a API do Resque em vez de excluir tudo no Redis do Resque.Resque faz alguma limpeza por dentro.

Se você deseja remover todas as filas e os trabalhos enfileirados associados:

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

As filas serão recriadas na próxima vez que um trabalho for enfileirado.

Documentação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top