在我的 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
MyModel.joberror
可预见地失败了ZeroDivisionError
。但是,当我从 delay_job_active_record ( MyModel.delay.joberror
) 内部运行此方法时,会吞下正确的错误,而是抛出此错误:
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'
这指向 aasm gem 中的代码,尽管此方法根本不涉及 aasm,甚至也不涉及MyModel
. 但是,如果我注释掉 aasm 代码,它会返回正确的 ZeroDivision 错误。
我已经读到delayed_job 对您希望它执行的方法进行了一些序列化,但我不明白这样做的后果足以知道它为什么会导致这个或如何解决它。