Rails 模块常量不适用于 Zeitwerk

问题描述 投票:0回答:1

我有这个代码

/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 配置文件。但我认为这不是正确的解决方案。

关于这个问题有什么想法吗?

ruby-on-rails zeitwerk
1个回答
0
投票

是的,您是对的,但如果您只想加载一个文件,则不要使用相对路径,而是像以前一样使用代码与指定文件。 在您的

version.rb
中使用以下代码。

lib/my_app/version.rb

module MyApp
  VERSION = '1.0.0'.freeze
end

这里

.freeze
是您文件中的定义常量,它将由 Zeitwerk(您应用程序的自动加载器)加载。

© www.soinside.com 2019 - 2024. All rights reserved.