Troubleshooting: Resque
This guide covers common troubleshooting tasks for working with Resque background jobs.
Accessing the Resque Console
Production Failed Jobs Dashboard
View failed jobs in production at:
https://api.pairteam.com/resque/failed
Note: You need the Arc password to access this page.
Utility Methods
The following utility methods can be run in the Bastion Rails console to help diagnose and manage failed jobs.
Count Failed Jobs by Queue and Class
Returns a sorted list of failed job counts grouped by queue and job class:
def failed_jobs_counts(queue_name = nil)
failed_jobs = Resque::Failure.all(0, 20000)
if queue_name.present?
failed_jobs.select! { |j| j["queue"] == queue_name }
end
failed_jobs
.group_by { |j| j["queue"] + "-" + j["payload"]["args"][0]["job_class"] }
.transform_values(&:count)
.sort_by { |_, count| -count }
end
Usage:
# Count all failed jobs
failed_jobs_counts
# Count failed jobs for a specific queue
failed_jobs_counts("tasks")
Clean Up Failed Jobs by Class
Removes all failed jobs for a specific job class:
def failed_jobs_cleanup(job_class)
Resque::Failure.each do |index, job|
Resque::Failure.remove(index) if job_class == job["payload"]["args"][0]["job_class"]
end
nil
end
Usage:
failed_jobs_cleanup("MyJobClass")
Built-in Resque::Failure Methods
Resque provides several built-in methods for managing failed jobs. See the Resque::Failure API documentation for the complete reference.
Requeue All Failed Jobs from a Queue
Resque::Failure.requeue_queue("tasks")
Clear Retried Jobs
Removes failed jobs that have already been retried:
Resque::Failure.clear_retried
Other Useful Methods
# Get total count of failed jobs
Resque::Failure.count
# Get a specific failed job by index
Resque::Failure.all(index, 1)
# Remove a specific failed job by index
Resque::Failure.remove(index)
# Requeue a specific failed job by index
Resque::Failure.requeue(index)
# Clear all failed jobs
Resque::Failure.clear