【问题标题】:Delayed_job won't make any changes to databaseDelayed_job 不会对数据库进行任何更改
【发布时间】: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


    【解决方案1】:

    您的 Rails 应用正在运行旧版本的 DJ gem,而您的控制台正在运行新版本。大约六个月前,Delayed::PerformableMethod 从 Struct 重构为常规类:https://github.com/collectiveidea/delayed_job/commit/7b8a79a72c0ee5d8bac4bc0b183d1cce9cedff85(因此,您的 Rails 应用程序运行了一个至少六个月前的 gem,而您的控制台运行的是比这更新的一个)。

    这是一个简单的解决方法。首先更新 Rails Gemfile 中的相应行。你会看到这样一行:

    gem 'delayed_job_active_record'
    

    如果它有版本规范,请确保它已更新到最新版本。然后从命令行(在 Rails 根目录中)运行:

    bundle update delayed_job_active_record
    

    【讨论】:

    • 这似乎很有希望,因为处理程序现在说 ruby​​/object。但它不会执行任务,并给出错误“{你有一个 nil 对象,但你没想到它!你可能期望一个 Array 的实例。在评估 nil.delete 时发生错误”这发生在 BOTH rails控制台和控制器启动延迟作业。想法?
    • @jay,我不清楚你在说什么。你到底跑了什么来得到那个错误?为什么任务不会执行?捆绑更新? @model.delay.method?还有什么?到目前为止,您到底改变了什么?
    • 哦..抱歉缺乏特异性。我运行了您建议的更新。然后我尝试运行 model.delay.method,它创建了一个延迟的作业。它现在在处理程序字段(ruby/object)中具有正确的初始行,并且它尝试运行作业 - 给出 nil 对象错误。如果我尝试从 rails 控制台(以前有效)运行相同的 model.delay.method,现在这也不起作用。我只运行了你建议的更新。
    • @jay,您能否发布该错误的完整堆栈跟踪(不仅仅是消息)?
    【解决方案2】:

    对于任何感兴趣的人,从 boot.rb 中删除以下行为我解决了这个问题:

     require 'yaml'
     YAML::ENGINE.yamler = 'syck'
    

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2015-10-21
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多