Rails自定义延迟作业 - 未初始化的常量

时间:2013-12-05 10:04:49

标签: ruby-on-rails ruby ruby-on-rails-3 delayed-job

我已成功使用delayed_job几年了,但最近我需要实现某种成功/失败的回调/挂钩。

在github上的delayed_job指南之后,我设置了以下自定义作业:

class XmlImportJob < Struct.new(:file, :supplier_id, :user_id, :directory)
  def perform
    Product.xml_import(file, supplier_id, user, directory)
  end

  def success(job)
    ProductMailer.xml_import_complete.deliver
  end

  def failure(job)
    ProductMailer.xml_import_failed.deliver
  end
end

例如,在使用Delayed::Job.enqueue XmlImportJob.new(secure_url, 1, 1, directory)运行时,我收到Job failed to load: uninitialized constant XmlImportJob.错误。

我已经尝试保存我的自定义作业,该作业位于app / jobs和lib下名为xml_import.rb的文件中,我收到同样的错误。

目前我只尝试通过rails控制台运行此功能。即使明确调用返回true的require 'xml_import',我也会得到同样的错误。

有没有成功使用自定义delayed_jobs经验的人知道我在做什么吗?

1 个答案:

答案 0 :(得分:6)

回答我自己的问题;

任何包含要自动加载的类和模块的自定义目录都必须添加到config / application.rb中,如下所示:

config.autoload_paths += %W(
  #{config.root}/app/jobs
)

这些文件夹中包含的文件必须根据rails的约定命名,因此XmlImportJob位于xml_import_job.rb中。