【发布时间】:2018-05-10 00:20:53
【问题描述】:
rails 文档没有指定如果在作业执行期间引发异常,是否调用回调。谁能确认这种行为?
子问题,如果实现了rescue_from,行为会改变吗?
如果在rescue_from中抛出错误怎么办?
【问题讨论】:
标签: ruby-on-rails rails-activejob
rails 文档没有指定如果在作业执行期间引发异常,是否调用回调。谁能确认这种行为?
子问题,如果实现了rescue_from,行为会改变吗?
如果在rescue_from中抛出错误怎么办?
【问题讨论】:
标签: ruby-on-rails rails-activejob
在活动作业中,如果引发错误,则不会调用 after_perform。我也没有在文档中看到它,但是活动作业中的错误处理要么手动完成(可能通过实现一个 rescue_from),要么由活动作业适配器处理。我知道对于延迟的作业适配器,如果在执行期间出现错误,该作业将重试几次,并且永远不会到达 after_perform。
【讨论】:
after_perform在执行perform的过程中如果出现错误,则不会执行perform,即使它被rescue_from救了。
class FooJob < ActiveJob::Base
after_perform do |job|
puts 'after perform'
end
def perform
puts "during perform"
end
end
> FooJob.perform_now
during perform
after perform
class FooJob < ActiveJob::Base
after_perform do |job|
puts 'after perform'
end
def perform
puts "during perform"
raise "error during perform"
end
end
> FooJob.perform_now
during perform
# ... trace
RuntimeError (error during perform)
class FooJob < ActiveJob::Base
rescue_from(StandardError) do |exception|
puts 'rescuing standard error: ' + exception.message
end
after_perform do |job|
puts 'after perform'
end
def perform
puts "during perform"
raise StandardError, "error during perform"
end
end
> FooJob.perform_now
during perform
# ... trace
rescuing standard error: error during perform
#<StandardError: error during perform>
【讨论】: