我在 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. ...
在这种情况下,为了安全起见,我已将其包含在自动加载路径FacebookTimelinePublisher
中的目录中的 PORO 类。app/publishers
感谢您提出的任何建议。
[更新]
我已经更改了设置延迟作业以使用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 ...."