Rubygem:如何加载 yaml 文件的信息

jon*_*hue 3 ruby rubygems ruby-on-rails constants

我的 gem 在config/my_gem.yml 中生成以下文件:

test: true
Run Code Online (Sandbox Code Playgroud)

现在我想将test的值加载到我的 gems 模块中以便能够调用:

MyGem.test
=> true
Run Code Online (Sandbox Code Playgroud)

那是我的尝试:

在 Rails 应用程序中 - config/initializers/my_gem.rb:

CONFIG_PATH = "#{Rails.root}/config/my_gem.yml"
MY_GEM = YAML.load_file(CONFIG_PATH)[Rails.env]
Run Code Online (Sandbox Code Playgroud)

在 gem - lib/my_gem.rb 中:

def self.test
    ::MY_GEM[:test]
end
Run Code Online (Sandbox Code Playgroud)

但是我得到一个例外,因为MY_GEM它没有被识别为一个常量(在lib/my_gem.rb 中

c:/RailsInstaller/Ruby2.3.​​0/lib/ruby/gems/2.3.0/gems/my_gem-0.1.0/lib/my_gem.rb:11:in `test': 未初始化的常量 MY_GEM (NameError)

Raf*_*ael 5

您应该能够通过在您的 gem 中执行此操作来加载应用程序 yaml 文件:

YAML.load_file('config/my_gem.yml')
Run Code Online (Sandbox Code Playgroud)

这要求工作目录是 Rails 应用程序的根目录——当您在该目录中调用 rails 命令时就是这种情况。