devroom.io/content/posts/2010-08-23-resque-how-to-requeue-failed-jobs.md
2019-06-05 14:32:16 +02:00

32 lines
1.2 KiB
Markdown

+++
date = "2010-08-23"
title = "Resque: how to requeue failed jobs"
tags = ["Ruby", "resque"]
slug = "resque-how-to-requeue-failed-jobs"
+++
Today I found about 100k Resque jobs in the _failed_ queue. Due to a small error in some user content, those jobs all failed. After fixing the problem, how do you reprocess all those jobs?
Option one: go to the `resque-web` backend and click _retry_ about 100.000 times.
Option two: do some cool ruby commands.
~
Resque offers you direct access to the _failed_ queue and also provides a method to `requeue` jobs. How easy can it be, right?
With `Resque::Failure.all(0,1)` you retrieve the first job from the _failed_ queue. `Resque::Failure.all` is simply a ruby Array.
To requeue jobs, you can use `Resque::Failure.requeue(index)` where index corresponds to the index of the job in the `Resque::Failure.all` Array.
To requeue all jobs in the _failed_ queue, you can simply run the following commands:
``` ruby
# Requeue all jobs in the failed queue
(Resque::Failure.count-1).downto(0).each { |i| Resque::Failure.requeue(i) }
# Clear the failed queue
Resque::Failure.clear
```
That's all there is to it, really. Happy processing!