8

嘿,我们有一个调用延迟作业的库类(lib/Mixpanel),如下所示:

class Mixpanel

  attr_accessor :options
  attr_accessor :event

  def track!()
   .. 
   dj = send_later :access_api # also tried with self.send_later
   ..
  end

  def access_api
   ..
  end

问题是,当我们运行 rake jobs:work: 时,会出现以下错误:

undefined method `access_api' for #<YAML::Object:0x24681b8>

知道为什么吗?

4

2 回答 2

16

Delayed_job 总是自动加载 ActiveRecord 类,但它不知道它在 db 中作为 YML 编组的其他类型的类(如 lib)。因此,您需要为它们显式触发类加载器。由于 DJ 启动了 Rails 环境,只需在初始化程序中提及任何非 AR 封送类:

(config/initializers/load_classes_for_dj.rb)

Mixpanel
于 2010-04-03T15:31:07.063 回答
2

一个小问题,我遵循了乔纳森的建议,但我需要require在类名之前添加一个,所以我将它用于load_classes_for_dj.rb

require 'mixpanel'
Mixpanel

然后它工作得很好!

于 2012-02-15T18:29:39.740 回答