使用线程安全时,模型类未在延迟作业中加载

Joh*_*hir 8 ruby-on-rails delayed-job

我有一个长期以来一直运作良好的应用程序.我正在开启线程安全!,现在延迟工作无效,说它无法找到我的模型文件之一.

Job failed to load: undefined class/module Foo

这不是我在/ lib中定义的自定义作业类,这是app/models中的模型文件

什么可能导致这个类没有被加载?

pat*_*pat 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
Run Code Online (Sandbox Code Playgroud)

Rails在由rake任务加载时设置全局变量.丑陋,但似乎罚款现在的工作对我来说...当然,如果你有一个是多线程的Rake任务,那么这是不理想,你可能应该调用Rails.application.eager_load!为了那些任务.我猜多线程rake任务很少见.

  • 刚刚又遇到了类似的问题并发现了一些新东西 - 在application.rb中没有设置`$ rails_rake_task`,所以上面的代码行必须进入相应的环境配置. (2认同)