Ruby on rails 延迟“使用AASM的ActiveRecord模型上的U作业-失败方法错误吞噬,抛出”;错误的参数数量“;相反

Ruby on rails 延迟“使用AASM的ActiveRecord模型上的U作业-失败方法错误吞噬,抛出”;错误的参数数量“;相反,ruby-on-rails,ruby,rails-activerecord,delayed-job,aasm,Ruby On Rails,Ruby,Rails Activerecord,Delayed Job,Aasm,在我的Rails 4应用程序中,我有一个带有AASM列的ActiveRecord模型。当我使用一个失败的方法来延迟作业活动记录时,它会吞下错误并抛出与AASM有关的其他东西 class MyModel < ActiveRecord::Base include AASM aasm do # aasm setup here end def self.joberror 1/0 #bad code here end end 这指向aasm gem中的代码

在我的Rails 4应用程序中,我有一个带有AASM列的ActiveRecord模型。当我使用一个失败的方法来延迟作业活动记录时,它会吞下错误并抛出与AASM有关的其他东西

class MyModel < ActiveRecord::Base
  include AASM

  aasm do
    # aasm setup here
  end

  def self.joberror
    1/0 #bad code here
  end
end

这指向aasm gem中的代码,尽管这种方法根本不涉及aasm,甚至也不涉及
MyModel
的实际实例。但是,如果我注释掉aasm代码,它会返回到正确的零除法错误


我已经读到延迟作业对您希望它执行的方法进行了一些序列化,但我不太了解这种序列化的后果,不知道它为什么会导致这种情况或如何修复它。

这个延迟作业代码就是问题所在。当delayed_作业遇到错误时,它会在对象上查找它可以调用的内容,在本例中是任何名为“error”的内容:

#lib/delayed/backend/base.rb:96
救援=>e
胡克:错误,e
提高e
#lib/delayed/backend/base.rb:111
def挂钩(名称,*args)
如果有效负载\u对象。响应?(名称)#
wrong number of arguments (2 for 0)
/Users/myhome/myproject/.gems/gems/aasm-4.0.5/lib/aasm/persistence/base.rb:67:in `block (2 levels) in state_with_scope'
# lib/delayed/backend/base.rb: 96    
rescue => e
  hook :error, e
raise e

# lib/delayed/backend/base.rb: 111
def hook(name, *args)
  if payload_object.respond_to?(name) # <--- my object has an unrelated method "error"
    method = payload_object.method(name)
    method.arity == 0 ? method.call : method.call(self, *args)
  end
rescue DeserializationError
end