1

我想将自定义类添加到 app 文件夹到干净的 Rails 6 项目 ruby​​ 2.7.0 中。根据 Zeitwerk 文档,它应该自动加载 app 目录下的所有路径。

app/custom/car.rb
class Car
  def self.print
    print 'Car'
  end  
end

我在 Rails 控制台中遇到错误

2.7.0 :001 > Car.print
NameError (uninitialized constant Car)

怎么了?

注意:当我将 car.rb 放到 app/models 中时,它可以正常工作,但在 app/custom 目录中时则不行

4

1 回答 1

2

您的问题可能不是 Zeitwerk 加载器,而是默认运行的 Spring 预加载器 - https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoload-paths指出“默认情况下,应用程序的自动加载路径包括应用程序启动时存在的所有应用程序子目录”

“当应用程序启动时”注释非常重要 - 在使用 spring 时,如果您添加一个文件夹/app并且 spring 已经在运行,您必须重新启动 spring 预加载器以在后台重新启动应用程序,以便 Zeitwerk 会选择它向上。

bundle exec spring status将向您显示弹簧预加载器的状态,您可以使用bundle exec spring stop它来停止它并在下次运行将使用它的命令时强制它重新加载rails console

于 2020-05-11T14:52:18.187 回答