提问人:user1929618 提问时间:5/11/2020 更新时间:5/11/2020 访问量:302
无法在 Rails6 中自动加载类
Cannot auto-load class in Rails6
问:
我想将自定义类添加到应用程序文件夹中到干净的 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 目录中时就不行了
答:
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 stop
rails console
评论
app
spring stop
rails serer