我的应用程序已经运行了很长时间。我正在开启线程安全!,现在延迟工作无效,说它找不到我的模型文件。
Job failed to load: undefined class/module Foo
这不是我在/ lib中定义的自定义作业类,这是app / models中的模型文件
可能导致此类无法加载的原因是什么?
答案 0 :(得分:12)
在您记录的问题上发布,以防其他人首先发现此SO帖子:
我刚刚也遇到了这个问题......这就是我发现的:如果应用程序是通过rake任务加载的话,Rails并不急于加载类(这就是DJ如何做到这一点)。
所以我所做的就是我production.rb
中的这段代码:
# Enable threaded mode, unless a rake task (likely Delayed Job) is running:
config.threadsafe! unless defined?($rails_rake_task) && $rails_rake_task
Rails在由rake任务加载时设置全局变量。丑陋,但似乎现在对我很好...当然,如果你有多线程的rake任务,那么这不是理想的,你应该调用Rails.application.eager_load!为了那些任务。我猜多线程rake任务很少见。
答案 1 :(得分:3)
即使使用 pat 的方法不使用线程安全的rake作业,我的工作仍然失败。
我最终不得不使用GitHub Wiki page上的以下手动加载技术:
# file: config/initializers/custom.rb
require 'my_custom_class'
答案 2 :(得分:0)
并没有真正相关,但我今天有完全相同的错误消息,延迟作业,没有启用线程安全。
原因和解决方案更加微不足道 - 我们的服务器上有另一个使用延迟作业的ruby产品,并且它的工作人员没有命名队列,因此他们从我正在设置的队列中抓取随机作业。