【发布时间】:2012-03-30 13:24:05
【问题描述】:
我在运行 DJ 时遇到很多问题。首先,我无法让延迟作业运行任何更改数据库的方法。我在本地使用 sqlite3 数据库 DJ 3.0.0 进行测试,甚至添加了延迟作业活动记录 gem。
例如,我曾尝试在后台运行以下方法:
@user = User.find(1)
@user.delay.recorder_method
这个方法在哪里:
def recorder_method
self.relevant_field +=1
update
end
这会创建一个延迟的作业,并且处理程序具有用户的适当信息和适当的方法名称。脚本运行作业,认为它已经成功,因此从延迟作业表中删除记录。但是用户没有改变(数据库没有改变)。
到底出了什么问题?请注意,当我从 rails 控制台运行相同的代码(“@user.delay.recorder_method”)时,它可以工作.. 不同之处在于 rails 控制台调用创建的处理程序是:
--- !ruby/object:Delayed::PerformableMethod
object: !ruby/ActiveRecord:User
attributes:
... (attribute info and rest of file)
而在控制器动作中由调用创建的是:
--- !ruby/struct:Delayed::PerformableMethod
object: !ruby/ActiveRecord:User
attributes:
这两件事的第 1 行没有区别(ruby/object 与 ruby/struct.. 前者有效,后者无效)。也许这可能表明出了什么问题。有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 delayed-job