ruby-on-rails - 如何忽略 Zeitwerk for Rails 6 中的文件夹?

标签 ruby-on-rails ruby ruby-on-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.

这看起来很棒:这是一个垃圾文件夹,永远不应加载,因此忽略它是完全有道理的。

Zeitwerk 文档位于 https://github.com/fxn/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'))

关于ruby-on-rails - 如何忽略 Zeitwerk for Rails 6 中的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125879/

相关文章:

ruby-on-rails - 清除 OS X 上的 memcached 服务器中的缓存

ruby-on-rails - db :reset 后 Postgres 函数未保留

ruby-on-rails - 如何在 Rails 应用程序中集成 FnordMetric

ruby-on-rails - 是否可以在 Rails 6 中使用 .js.erb 文件?

ruby-on-rails - 如何在Rails 6和Webpack中使用自定义字体

ruby-on-rails - 事件存储 - 多项服务 - 直接上传未按预期工作

ruby-on-rails - 如何在服务器端使用 graphql-ruby 传递多部分表单数据和文件上传?

ruby - 使用 Liquid 标记在 Jekyll 中获取今天的日期

ruby-on-rails - 系统堆栈错误 : level too deep after running db:seed

ruby - 如何遍历 Ruby 中的范围数组?