Rails5,ActiveJob rescue_from无法正常工作

时间:2017-04-25 15:32:11

标签: ruby-on-rails-5 rails-activejob rescue

我正在尝试重现此示例代码: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

1 个答案:

答案 0 :(得分:1)

与实际捕获任何ActionController::Base.rescue_from的{​​{1}}行为相反:

Exception

Example code

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

Example code

您可以在此处查看与维护人员的对话:https://github.com/rails/rails/issues/28874#issuecomment-297599254