class DeadLetter < ApplicationRecord
validates :job_class, :payload, :error_class, presence: true
end
class SafeJob < ApplicationJob
rescue_from(StandardError) do |error|
DeadLetter.create!(
job_class: self.class.name,
payload: arguments,
error_class: error.class.name,
error_message: error.message
)
raise
end
end
Retries can become infinite noise. For certain failure classes, record the payload + error in a DLQ table and alert/triage. This keeps queues healthy and makes failures actionable.