Авто / нетерпеливая загрузка каталога вне / app
В приложении Rails (Rails 6) я создал каталог в корне приложения rails - вне
/app
папка. Я хочу попытаться сохранить некоторую логику вне веб-фреймворка Rails.
- rails_root
- app/
- models/
- controllers/
- lib/
- tasks/
- my_domain/
- check_record.rb
файл check_record.rb
module MyDomain
module CheckRecord
def self.call(record)
end
end
end
Теперь я не могу автоматически загружать этот каталог в среде тестирования (RSpec) и разработки (консоль rails).
Когда я пытаюсь
application.rb
config.autoload_paths += %W(#{config.root}/my_domain)
Тесты терпят неудачу из-за неинициализированной константы #Class:0x00007f96e1f1ad90::MyDomain
Получение той же ошибки при попытке доступа к классам в консоли rails
Когда я пытаюсь
application.rb
config.paths.add "my_domain", eager_load: true, glob: "**/*.rb"
Я вижу, что все файлы из этой папки регистрируются в
Rails.configuration.eager_load_paths
, но тесты не проходят с тем же сообщением об ошибке
Когда я перемещаю этот код в выделенный класс инициализатора, тот же вывод или при запуске консольного инициализатора Rails не загружается вообще.
Использование типов доменов:
class MyRecord < ApplicationRecord
def check
MyDomain::CheckRecord.call(self)
end
end
Как я могу загружать или автоматически загружать каталог с файлами ruby вне
/app
папка?
1 ответ
Я считаю, что вы используете автозагрузчик zeitwerk, который используется по умолчанию в Rails 6. В этом случае ваш файл check_record.rb должен быть
module CheckRecord
def self.call(record)
end
end
И это должно называться так
class MyRecord < ApplicationRecord
def check
CheckRecord.call(self)
end
end
Пожалуйста, обратитесь к https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#project-structure для получения более подробной информации.