Skip to main content

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