otwarchive-symphonyarchive/app/jobs/application_mailer_job.rb

35 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class ApplicationMailerJob < ActionMailer::MailDeliveryJob
# TODO: We have a mix of mailers that take ActiveRecords as arguments, and
# mailers that take IDs as arguments. If an item is unavailable when the
# notification is sent, it'll produce an ActiveJob::DeserializationError in
# the former case, and an ActiveRecord::RecordNotFound error in the latter.
#
# Ideally, we don't want to catch RecordNotFound errors, because they might
# be a sign of a different problem. But until we move all of the mailers over
# to taking ActiveRecords as arguments, we need to catch both errors.
retry_on ActiveJob::DeserializationError,
attempts: 3,
wait: 1.minute do
# silently discard job after 3 failures
end
retry_on ActiveRecord::RecordNotFound,
attempts: 3,
wait: 1.minute do
# silently discard job after 3 failures
end
# Retry three times when calling a method on a nil association, and then fall
# back on the Resque failure queue if the error persists (so that we have a
# record of it). This should address the issues that arise when we
# successfully load an object, but can't load its associations because the
# original object has been deleted in the meantime.
#
# (Most errors for calling a method on a nil object will be NoMethodErrors,
# but any that occur within the template itself will be converted to
# ActionView::Template:Errors. So we handle both.)
retry_on NoMethodError, attempts: 3, wait: 1.minute
retry_on ActionView::Template::Error, attempts: 3, wait: 1.minute
end