如何在 Zeitwerk 中忽略 Rails 6 的文件夹?
How to ignore a folder in Zeitwerk for Rails 6?
简单的问题,但不知何故答案逃避了我。
在使用 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
是您忽略文件夹的方式。很公平。但是如何找到 loader
? 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:是的,我知道我应该从 app
中删除它,我会的。但是这个问题还是很烦人
我 运行 遇到了同样的问题,结果发现它在抱怨文件夹名称。
将此添加到 application.rb
可能对您有用:
Rails.autoloaders.main.ignore(Rails.root.join('app/junkyard'))
我将此添加到 config/initializers/zeitwerk.rb
:
Rails.autoloaders.each do |autoloader|
autoloader.ignore(Rails.root.join('app/ui'))
...
简单的问题,但不知何故答案逃避了我。
在使用 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
是您忽略文件夹的方式。很公平。但是如何找到 loader
? 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:是的,我知道我应该从 app
中删除它,我会的。但是这个问题还是很烦人
我 运行 遇到了同样的问题,结果发现它在抱怨文件夹名称。
将此添加到 application.rb
可能对您有用:
Rails.autoloaders.main.ignore(Rails.root.join('app/junkyard'))
我将此添加到 config/initializers/zeitwerk.rb
:
Rails.autoloaders.each do |autoloader|
autoloader.ignore(Rails.root.join('app/ui'))
...