2016-01-07 4 views
0

У меня есть странная проблема с ActiveJob.ActiveJob uninitialized constant

От контроллера я выполняющем следующее предложение:

ExportJob.set(wait: 5.seconds).perform([A series of parameters, basically strings and integers]) 

ExportJob.rb

require_relative 'blablabla/resource_manager' 

class ExportJob < ActiveJob::Base 
    def perform 
     ResourceManager.export_process([A series of parameters, basically strings and integers]) 
    end 
end 

Когда контроллер/действие выполняется в первый раз, процесс идет нормально, но второй раз возникает ошибка:

uninitialized constant ExportJob::ResourceManager 

Странно то, что это не e только работа у меня в моем проекте, другие выполняются без каких-либо проблем.

Я Прикрепление некоторую информацию о моем проекте:

развития/production.rb

config.active_job.queue_adapter = :delayed_job 

Gemfile:

gem 'delayed_job' 

gem 'delayed_job_active_record' 

Любой ключ будет помощь для меня.

Заранее благодарен!

+1

Try ':: ResourceManager.export_process (...)' – RAJ

+0

используйте ':: ResourceManager' –

+0

или используйте require_dependency вместо require_relative – dsounded

ответ

1

Константы не имеют глобального масштаба в Ruby. Константы могут быть видны из любой области, но вы должны указать, где будет найдена константа.

Без :: Рубин ищет ResourceManager постоянной в лексической области видимости текущего исполняемого кода (который ExportJob класс, поэтому он ищет ExportJob::ResourceManager).

Следующие должны работать (при условии, что ResourceManager определяется как верхний уровень постоянной (например, не вложен в любой модуль/класс):

class ExportJob < ActiveJob::Base 
    def perform 
    ::ResourceManager.export_process(*args) 
    end 
end 
+0

ResourceManager не является константой, а классом. , Я собираюсь попробовать ваше предложение. – Ele

+1

@EleazarEnrique class 'name ** является константой ** –

+0

Хорошо! Спасибо за объяснение. – Ele

Смежные вопросы