8

我有一个应用程序已经运行了很长时间。我正在打开线程安全!,现在延迟作业不起作用,说它找不到我的模型文件之一。

作业加载失败:未定义的类/模块 Foo

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

什么可能导致此类无法加载?

4

3 回答 3

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 任务很少见。

于 2012-09-24T18:04:33.050 回答
3

即使在使用pat不使用 threadsafe 进行 rake 作业的方法之后,我的作业仍然失败。

我最终不得不使用GitHub Wiki 页面上的以下手动加载技术:

# file: config/initializers/custom.rb
require 'my_custom_class'
于 2013-04-27T01:59:10.220 回答
0

不是真的相关,但我今天有完全相同的错误消息与延迟作业,没有启用线程安全。

原因和解决方案要简单得多——我们的服务器上有另一个 ruby​​ 产品使用延迟作业,它的工作人员没有命名队列,所以他们从我设置的队列中抓取随机作业。

于 2012-12-24T04:20:54.733 回答