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

ant*_*paw 3 ruby gem ruby-on-rails file

我想读从我包括在Rails引擎创业板.yml文件main_app.该文件位于config/test.yml.

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

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

Ben*_*enj 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")
Run Code Online (Sandbox Code Playgroud)

解决方案2

最可取的是,您可以通过编程方式获取gem路径Bundler,然后使用该根路径检索yml文件的完整路径.

看看这个答案,你可以很容易地适应你的情况