无法在 Rails6 中自动加载类

Cannot auto-load class in Rails6

提问人:user1929618 提问时间:5/11/2020 更新时间:5/11/2020 访问量:302

问:

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

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 目录中时就不行了

Ruby-on-Rails 红宝石 时代周刊

评论

0赞 Olkin 5/11/2020
你有没有研究过 stackoverflow.com/questions/58681673/...
0赞 Amit Patel 5/11/2020
下面的所有目录都应该自动加载。尝试并重新启动appspring stoprails serer

答:

2赞 jimcavoli 5/11/2020 #1

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

“当应用程序启动时”的注释非常重要 - 在 spring 中,如果您添加一个文件夹并且 spring 已经在运行,则必须重新启动 spring 预加载器才能在后台重新启动应用程序,以便 Zeitwerk 将其拾取。/app

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