我已经成功使用 delayed_job 几年了,但最近我需要实现某种成功/失败回调/ Hook 。
按照 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 经验的人是否知道我在这里做什么?
最佳答案
回答我自己的问题;
任何你想要自动加载的包含类和模块的自定义目录都必须添加到 config/application.rb 中,如下所示:
config.autoload_paths += %W(
#{config.root}/app/jobs
)
这些文件夹中包含的文件必须根据 rails 的约定命名,因此 XmlImportJob 驻留在 xml_import_job.rb 中。
关于ruby-on-rails - Rails 自定义延迟作业 - 未初始化的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396944/