【问题标题】:Delayed Job on Heroku intermittently fails with 'Uninitialized constant'Heroku 上的延迟作业间歇性地因“未初始化常量”而失败
【发布时间】:2012-11-29 16:20:42
【问题描述】:

我在 Heroku 上有一个 Rails 3.2.6 应用程序,带有一个用于 Delayed Job 2.1.4 的工作人员测功机。当我在本地运行工人时,不会出现任何问题。但是当我在 Heroku 上运行它时,它似乎会表现得不规律,并导致一些工作失败。起初我认为这种模式与工人测功机旋转并重新启动有关,因为经过几次尝试,工作又开始工作了。如果等待时间过长,作业就会开始失败。但现在我不确定这与减速有关,因为作业之间仅 5 分钟就再次导致错误。但是,让作业彼此靠近似乎会增加成功执行的机会。

错误如下:

irb(main):052:0> Delayed::Job.last.last_error
  Delayed::Backend::ActiveRecord::Job Load (9.9ms)  SELECT `delayed_jobs`.* FROM `delayed_jobs` ORDER BY `delayed_jobs`.`id` DESC LIMIT 1
=> "{Job failed to load: uninitialized constant FacebookTimelinePublisher. ...

在这种情况下,FacebookTimelinePublisherapp/publishers 目录中的 PORO 类,我已将其包含在自动加载路径中以进行安全测量。

感谢您提出的任何建议。

[更新]

我更改了设置延迟作业的方式以使用Delayed::Job.enqueue 而不是#delay。现在这已经将问题向前推进了,因为 Delayed Job 正确地找到了 Job 类,但是现在当它初始化自身时,它没有找到 Rails 模型。尽管如此,问题的“间歇性”性质仍然存在,因为有时作业执行顺利。

"{Job failed to load: uninitialized constant ShareObject. Handler: \"--- !ruby/struct:FacebookTimelinePublisher \\nshare_object: !ruby/ActiveRecord:ShareObject \\n  attributes: \\n  ...."

【问题讨论】:

    标签: ruby-on-rails ruby heroku delayed-job


    【解决方案1】:

    不确定 Heroku 环境,但我通过在初始化程序中要求自定义类解决了类似的问题(我使用了延迟作业配置初始化程序):

    require "#{Rails.root}/app/publishers/facebook_timeline_publisher.rb"

    另请参阅:Delayed::Job with modules

    【讨论】:

      【解决方案2】:

      问题似乎与 gem 版本有关。我升级到了delayed_job 3.0.4 并安装了delayed_job_active_record (0.3.3),所以我不确定这两个中的哪一个解决了问题,但现在所有作业都成功执行了。

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-22
        • 2014-08-26
        • 1970-01-01
        • 2011-07-07
        • 2012-07-15
        • 2014-12-15
        • 2011-10-07
        • 2011-11-21
        相关资源
        最近更新 更多