Неинициализированная постоянная ошибка при переходе на Zeitwerk

В настоящее время у меня есть следующие файлы в jobs каталог:

# app/jobs/importer.rb
module Imporer
  def self.valid_importers
    # Do stuff
  end
end

# app/jobs/importer/custom_import_job.rb
class Importer::CustomImportJob < ApplicationJob
  def perform
    # Do stuff
  end
end

Это работает без проблем с использованием классического загрузчика кода, но при переключении на Zeitwerk я получаю NameError: uninitialized constant Importer::CustomImportJob ошибка при запуске rails zeitwerk:check.

Я пытался переехать custom_import_job.rb к jobsкаталог, но все равно получил ту же ошибку. Добавлениеapp/jobs/importer к config.autoload_paths тоже не помогло.

Что-то не так с файловой структурой или мне что-то не хватает в настройках Zeitwerk?

2 ответа

Покопавшись, я понял, что у меня в development.rb:

Dir[Rails.root.join('app/jobs/importer/*.rb')].each { |f| require f }

Похоже, это и было причиной проблемы. Теперь, когда он удален, все работает, как ожидалось!

Вы можете посмотреть, находится ли ваше приложение / вакансии на пути:

ActiveSupport::Dependencies.autoload_paths

продлить на config.autoload_paths в config/application.rb если необходимо.

Дополнительная информация по отладке: https://guides.rubyonrails.org/autoloading_and_reloading_constants.html.

  • Остановите весну. Перезагрузите сервер. Также может помочь.

Надеюсь, это поможет.

Другие вопросы по тегам