我有这个代码
/lib/my_app/version.rb
module MyApp
VERSION = '3.0.7'
end
当我尝试这个 MyApp::VERSION 时,我看到了这个错误:
uninitialized constant MyApp::VERSION.
然后我尝试添加
config.eager_load_paths << Rails.root.join("lib")
,又出现了新的错误:expected file /Users/Documents/big_app/lib/my_app/version.rb to define constant MyApp::Version, but didn't (Zeitwerk::NameError)
对我有用的唯一解决方案是将
require_relative '../lib/my_app/version'
添加到 application.rb 配置文件。但我认为这不是正确的解决方案。
关于这个问题有什么想法吗?
是的,您是对的,但如果您只想加载一个文件,则不要使用相对路径,而是像以前一样使用代码与指定文件。 在您的
version.rb
中使用以下代码。
lib/my_app/version.rb
module MyApp
VERSION = '1.0.0'.freeze
end
这里
.freeze
是您文件中的定义常量,它将由 Zeitwerk(您应用程序的自动加载器)加载。