Add exception handling with built-in retry options
This commit is contained in:
parent
387a7d9935
commit
ef4aff07a4
@ -55,5 +55,17 @@ def enqueue_at(timestamp, *args)
|
||||
def initialize(arguments = nil)
|
||||
@arguments = arguments
|
||||
end
|
||||
|
||||
def retry_now
|
||||
self.class.enqueue *arguments
|
||||
end
|
||||
|
||||
def retry_in(interval)
|
||||
self.class.enqueue_in interval, *arguments
|
||||
end
|
||||
|
||||
def retry_at(timestamp)
|
||||
self.class.enqueue_at timestamp, *arguments
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,13 +1,22 @@
|
||||
require 'active_support/rescuable'
|
||||
require 'active_job/arguments'
|
||||
|
||||
module ActiveJob
|
||||
module Performing
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
include ActiveSupport::Rescuable
|
||||
end
|
||||
|
||||
def perform_with_hooks(*serialized_args)
|
||||
self.arguments = Arguments.deserialize(serialized_args)
|
||||
|
||||
run_callbacks :perform do
|
||||
perform *arguments
|
||||
end
|
||||
rescue => exception
|
||||
rescue_with_handler(exception)
|
||||
end
|
||||
|
||||
def perform(*)
|
||||
|
@ -1,5 +1,4 @@
|
||||
require 'helper'
|
||||
require 'active_job/arguments'
|
||||
require 'jobs/callback_job'
|
||||
|
||||
require 'active_support/core_ext/object/inclusion'
|
||||
|
16
test/cases/rescue_test.rb
Normal file
16
test/cases/rescue_test.rb
Normal file
@ -0,0 +1,16 @@
|
||||
require 'helper'
|
||||
require 'jobs/rescue_job'
|
||||
|
||||
require 'active_support/core_ext/object/inclusion'
|
||||
|
||||
class RescueTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
$BUFFER = []
|
||||
end
|
||||
|
||||
test 'rescue perform exception with retry' do
|
||||
job = RescueJob.new
|
||||
job.perform_with_hooks("david")
|
||||
assert_equal [ "rescued from StandardError", "performed beautifully" ], $BUFFER
|
||||
end
|
||||
end
|
15
test/jobs/rescue_job.rb
Normal file
15
test/jobs/rescue_job.rb
Normal file
@ -0,0 +1,15 @@
|
||||
class RescueJob < ActiveJob::Base
|
||||
rescue_from(StandardError) do
|
||||
$BUFFER << "rescued from StandardError"
|
||||
arguments[0] = "DIFFERENT!"
|
||||
retry_now
|
||||
end
|
||||
|
||||
def perform(person = "david")
|
||||
if person == "david"
|
||||
raise "Hair too good"
|
||||
else
|
||||
$BUFFER << "performed beautifully"
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user