我已成功使用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.
错误.
我已经尝试保存我的自定义作业,该作业位于xml_import.rb
app/jobs和lib下的一个文件中,我得到了同样的错误.
目前我只尝试通过rails控制台运行它.即使显式调用require 'xml_import'
哪个返回true,我也会得到相同的错误.
有成功使用自定义delayed_jobs经验的人是否知道我在做什么呢?
回答我自己的问题;
任何包含您想要自动加载的类和模块的自定义目录都必须添加到config/application.rb中,如下所示:
config.autoload_paths += %W( #{config.root}/app/jobs )
这些文件夹中包含的文件必须根据rails的约定命名,因此XmlImportJob位于xml_import_job.rb中.