Rails 6 の Zeitwerk でフォルダーを無視するにはどうすればよいですか?

概要

単純な質問ですが、どういうわけか答えがわかりません。

Zeitwerk を使用して Rails 6 に移行すると、次のことが得られます。

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.

これは素晴らしいことだと思われます。これはジャンク フォルダーであり、決してロードすべきではないため、無視するのが完全に理にかなっています。

https://github.com/fxn/zeitwerk の Zeitwerk ドキュメントには次のように書かれています。

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

フォルダーを無視する方法です。けっこうだ。しかし、ローダーはどうやって見つければいいのでしょうか? Zeitwerk の自動ローディングに関する Rails ガイド (https://guides.rubyonrails.org/autoloading_and_reloading_constants.html) では、フォルダーを直接無視する方法については言及されていませんが、Rails.autoloaders.main に隠されているオートローダーについては言及されています。

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

または

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

それが進むべき道だろう。運がなかった。これをapplication.rbとinitializers/zeitwerk.rbに入れてみましたが、どちらも機能しませんでした。

Rails 内で Zeitwerk を含むフォルダーを無視する場所と方法について何かアイデアはありますか?

PS: はい、これをアプリから削除するべきであることはわかっています。そうします。しかし、その疑問は依然として悩ましい。

解決策

私もこれと同じ問題に遭遇しましたが、フォルダー名に関する問題が発生していることがわかりました。

これを application.rb に追加するとうまくいくかもしれません:

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