如何从Gem中读取文件(.yml)

时间:2014-07-13 12:18:39

标签: ruby-on-rails ruby file gem

我想从 main_app 中读取Rails Engine Gem中包含的.yml文件。该文件位于config/test.yml

IO.read("config/test.yml")No such file or directory @ rb_sysopen

而失败

如果我将文件移动到主应用程序中,一切正常。但是我需要宝石中的这个文件。

2 个答案:

答案 0 :(得分:8)

解决方案1 ​​

您可以将根路径存储在主gem文件的常量中,并在代码的其他位置检索它。您必须确保在应用程序中的代码运行之前已初始化gem,否则您将遇到错误,因为该常量不会被定义。

# lib/my_gem.rb
GEM_ROOT = File.expand_path("../..", __FILE__)

# app/.../some_class.rb
IO.read("#{GEM_ROOT}/config/test.yml")

解决方案2

最值得注意的是,您可以从Bundler以编程方式获取gem路径,然后使用该根路径检索yml文件的完整路径。

看看这个answer您可以轻松适应您的情况

答案 1 :(得分:1)

你应该能够在你的gem中加载app yaml文件:

  

YAML.load_file( '配置/ test.yml')