Как игнорировать папку в Zeitwerk для Rails 6?

Простой вопрос, но почему-то ответ ускользает от меня.

При переходе на Rails 6 с Zeitwerk я получаю:

Please, check the "Autoloading and Reloading Constants" guide for solutions.
 (called from <top (required)> at APP_ROOT/config/environment.rb:7)
rails aborted!
Zeitwerk::NameError: wrong constant name Enforce-calls-to-come-from-aws inferred by Module from directory

  APP_ROOT/app/junkyard/enforce-calls-to-come-from-aws

Possible ways to address this:

  * Tell Zeitwerk to ignore this particular directory.
  * Tell Zeitwerk to ignore one of its parent directories.
  * Rename the directory to comply with the naming conventions.

Что кажется отличным: это папка нежелательной почты, и ее никогда не следует загружать, поэтому игнорировать ее имеет смысл.

В документации Zeitwerk по адресу https://github.com/fxn/zeitwerk говорится

tests = "#{__dir__}/**/*_test.rb"
loader.ignore(tests)
loader.setup

это то, как вы игнорируете папку. Справедливо. Но как мне найти loader? Руководство Rails по автозагрузке Zeitwerk (https://guides.rubyonrails.org/autoloading_and_reloading_constants.html) не упоминает, как напрямую игнорировать папки, но упоминает автозагрузчик, спрятанный в Rails.autoloaders.main, поэтому я решил, что

Rails.autoloaders.main.ignore("#{__dir__}/junkyard/**/*.rb")

or

Rails.autoloaders.main.ignore("#{__dir__}/app/junkyard/**/*.rb")

будет путь пойти. Не повезло. Я пробовал поместить это в application.rb и в initializers/zeitwerk.rb, но ни один из них не работал.

Есть идеи, где и как игнорировать папку с Zeitwerk в Rails?

PS: да, я знаю, что мне нужно просто удалить это из app, и я это сделаю. Но вопрос по-прежнему беспокоит.


person Iain Bryson    schedule 26.09.2019    source источник


Ответы (1)


Я столкнулся с той же проблемой, и оказалось, что он жаловался на имя папки.

Добавление этого в application.rb может сработать для вас:

Rails.autoloaders.main.ignore(Rails.root.join('app/junkyard'))

person ajkerr    schedule 01.10.2019
comment
Спасибо @ajkerr, это помогает! - person Iain Bryson; 02.10.2019
comment
Спасибо за это! У меня получилось поместить это в инициализатор, который был лучше, чем application.rb. - person ryanb; 19.11.2020
comment
@IainBryson, вы должны принять этот ответ, если он решил вашу проблему. - person Barry; 09.12.2020