Rails5,ActiveJob rescue_from 不工作
Rails5, ActiveJob rescue_from not working
我正在尝试重现此示例代码:https://apidock.com/rails/ActiveJob/Enqueuing/retry_job 但我无法使 rescue_from
在 ActiveJob
中工作
重现步骤
我准备了一个测试项目:
预期行为
在这份工作中:
我希望在执行作业时看到 rescue_from
消息:
irb(main):005:0> TestJobJob.perform_now
实际行为
我看到的不是消息,而是传播了异常:
irb(main):004:0> TestJobJob.perform_now
Performing TestJobJob from Async(default)
Performed TestJobJob from Async(default) in 0.82ms
Exception: This is the error message
from /Users/fguillen/Development/Temp/TestingActiveJobRescueFrom/app/jobs/test_job_job.rb:9:in `perform'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activejob-5.0.2/lib/active_job/execution.rb:34:in `block in perform_now'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:126:in `call'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:455:in `call'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:448:in `block (2 levels) in around'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:286:in `block (2 levels) in halting'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/i18n-0.8.1/lib/i18n.rb:257:in `with_locale'
当我尝试在测试中重现问题时出现相同的行为:
系统配置
Rails 版本: 5.0.2
Ruby版本:2.3.1p112
与实际捕获任何 Exception
的 ActionController::Base.rescue_from
行为相反:
class MyTestsController < ApplicationController
rescue_from Exception do |exception|
render plain: "Rescuing the exception: '#{exception}'", status: 500
end
def raise_exception
raise Exception.new("This is an Exception")
end
def raise_standard_error
raise StandardError.new("This is an StandardError")
end
end
ActiveJob::Base.rescue_from
仅捕获 类 继承自 StandardError
:
class TestJob2Job < ApplicationJob
rescue_from Exception do |exception|
Rails.logger.info "I am on rescue_from: #{exception}"
end
def perform(*args)
raise StandardError.new("This is the error message")
end
end
您可以在此处查看与维护者的对话:https://github.com/rails/rails/issues/28874#issuecomment-297599254
我正在尝试重现此示例代码:https://apidock.com/rails/ActiveJob/Enqueuing/retry_job 但我无法使 rescue_from
在 ActiveJob
重现步骤
我准备了一个测试项目:
预期行为
在这份工作中:
我希望在执行作业时看到 rescue_from
消息:
irb(main):005:0> TestJobJob.perform_now
实际行为
我看到的不是消息,而是传播了异常:
irb(main):004:0> TestJobJob.perform_now
Performing TestJobJob from Async(default)
Performed TestJobJob from Async(default) in 0.82ms
Exception: This is the error message
from /Users/fguillen/Development/Temp/TestingActiveJobRescueFrom/app/jobs/test_job_job.rb:9:in `perform'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activejob-5.0.2/lib/active_job/execution.rb:34:in `block in perform_now'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:126:in `call'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:455:in `call'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:448:in `block (2 levels) in around'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/callbacks.rb:286:in `block (2 levels) in halting'
from /Users/fguillen/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/i18n-0.8.1/lib/i18n.rb:257:in `with_locale'
当我尝试在测试中重现问题时出现相同的行为:
系统配置
Rails 版本: 5.0.2 Ruby版本:2.3.1p112
与实际捕获任何 Exception
的 ActionController::Base.rescue_from
行为相反:
class MyTestsController < ApplicationController
rescue_from Exception do |exception|
render plain: "Rescuing the exception: '#{exception}'", status: 500
end
def raise_exception
raise Exception.new("This is an Exception")
end
def raise_standard_error
raise StandardError.new("This is an StandardError")
end
end
ActiveJob::Base.rescue_from
仅捕获 类 继承自 StandardError
:
class TestJob2Job < ApplicationJob
rescue_from Exception do |exception|
Rails.logger.info "I am on rescue_from: #{exception}"
end
def perform(*args)
raise StandardError.new("This is the error message")
end
end
您可以在此处查看与维护者的对话:https://github.com/rails/rails/issues/28874#issuecomment-297599254