Персонализирана отложена задача на Rails - неинициализирана константа

Използвам успешно delayed_job от няколко години, но наскоро имам нужда да внедря някакъв вид обратно извикване/куки за успех/неуспех.

Следвайки ръководството за delayed_job в github, настроих следната персонализирана задача:

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 има ли представа какво правя тук?


person Raoot    schedule 05.12.2013    source източник
comment
Използвахме успешно DelayedJobs - работи много подобно на Resque. Мисля, че вашият проблем е, че XMLImportJob не е обект на опашка? Може да греша напълно тук, но съм сигурен, че трябва да създадете някакъв вид опашка, която след това можете да добавите към DelayedJob?   -  person Richard Peck    schedule 05.12.2013
comment
Благодаря, ще го разгледам. Мисля, че може също да е, че класът е XmlImportJob' but the file is just xml_import.rb' също така, че приложението/заданията не се зареждат автоматично.   -  person Raoot    schedule 05.12.2013
comment
Да - усещането е, че тъй като не е в типичния обхват на модела (Т.Е. вие манипулирате файл), може би DelayedJob има нужда от нещо, което да извика файла XmlImportJob :)   -  person Richard Peck    schedule 05.12.2013
comment
Беше както си мислех! Странно е как писането на проблема тук понякога може да ви накара да разберете какво не е наред.   -  person Raoot    schedule 05.12.2013
comment
:) Кажете ми как е!!   -  person Richard Peck    schedule 05.12.2013


Отговори (1)


За да отговоря на собствения си въпрос;

Всички персонализирани директории с класове и модули, които искате да се зареждат автоматично, трябва да бъдат добавени към config/application.rb по следния начин:

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

Файловете, съдържащи се в тези папки, трябва да бъдат именувани според конвенциите на rails, така че XmlImportJob се намира в xml_import_job.rb.

person Raoot    schedule 05.12.2013