Rails Engine, который переопределяет модели с другого движка, не проходит проверку Zeitwerk - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю два двигателя. Engine Two построен на Engine One . Я использую оба этих двигателя в приложении , которое я создаю. Я использовал class_eval Engine метод переопределения , упомянутый в руководстве по рельсам.

# app/models/active_stix/tool_override.rb
ActiveStix::Tool.class_eval do
# Model override code here
end

Переопределение требуется из lib / engine_name / engine.rb следующим образом

    initializer "active_attack.update_stix" do |app|
      engine_root = File.expand_path("../../..", __FILE__)
      Dir.glob(engine_root + "/app/overrides/**/*_override*.rb").each do |c|
        require_dependency(c)
      end
    end

В разработке все работает как положено, но когда я запускаю rails zeitwerk:check или пытаюсь развернуть приложение в Heroku, я получаю следующую ошибку

ожидаемый файл ~ / .rvm / gems / ruby -2.7.0 / gems / active_attack-0.1.14 / app / overrides / models / active_stix / tool_override.rb для определения константы Models :: ActiveStix :: ToolOverride

Похоже, это связано на Проблема Rails 36100 , но эта проблема, похоже, описывает, как основное приложение Rails может переопределять модели Engine. Кажется, он не работает для одного двигателя, переопределяющего модели другого двигателя.

1 Ответ

0 голосов
/ 13 апреля 2020

Отвечено в Github Issue

Rails.autoloaders.main.ignore(absolute/path/to/app/overrides) игнорирует каталог переопределений.

config.autoloader = :classic использует предыдущий автозагрузчик Rails вместо zeitwerk.

...