instance method
discard_on
Ruby on Rails edge
Since v5.1.7Signature
discard_on(*exceptions, report: false, &block)
Discard the job with no attempts to retry, if the exception is raised. This is useful when the subject of the job, like an Active Record, is no longer available, and the job is thus no longer relevant.
Passing the :report option reports the error through the error reporter before discarding the job.
You can also pass a block that’ll be invoked. This block is yielded with the job instance as the first and the error instance as the second parameter.
retry_on and discard_on handlers are searched from bottom to top, and up the class hierarchy. The handler of the first class for which exception.is_a?(klass) holds true is the one invoked, if any.
Example
class SearchIndexingJob < ActiveJob::Base
discard_on ActiveJob::DeserializationError::RecordNotFound
discard_on CustomAppException, report: true
discard_on(AnotherCustomAppException) do |job, error|
CustomErrorHandlingCode.handle(job, error)
end
def perform(record)
# Will raise ActiveJob::DeserializationError::RecordNotFound if the record can't be found
# Might raise CustomAppException for something domain specific
end
end
Parameters
-
exceptionsrest -
reportkey = false -
blockblock
Source
# File activejob/lib/active_job/exceptions.rb, line 110
def discard_on(*exceptions, report: false, &block)
block = ActiveSupport::Ractors.try_shareable_proc(block) if block
rescue_from(*exceptions, &discard_on_handler(report, block))
end
Defined in activejob/lib/active_job/exceptions.rb line 110
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveJob::Exceptions::ClassMethods