Неинициализированная константа ActiveJob

У меня странная проблема с ActiveJob,

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

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

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

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

разработка / production.rb

config.active_job.queue_adapter = :delayed_job

Gemfile:

gem 'delayed_job'

gem 'delayed_job_active_record'

Любая подсказка поможет мне.

Заранее спасибо!

1 ответ

Решение

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

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

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

class ExportJob < ActiveJob::Base
  def perform
    ::ResourceManager.export_process(*args)
  end
end
Другие вопросы по тегам