我想从 main_app 中读取Rails Engine Gem中包含的.yml文件。该文件位于config/test.yml
。
IO.read("config/test.yml")
因No such file or directory @ rb_sysopen
如果我将文件移动到主应用程序中,一切正常。但是我需要宝石中的这个文件。
答案 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')