有没有办法知道我宝石的根路径?我正在尝试从gems路径中的yaml加载默认配置。如何使用ruby获取gems根目录?
答案 0 :(得分:28)
鉴于以下项目结构:
your_gem/
lib/
your_gem.rb
我将如何做到这一点:
# your_gem.rb
module YourGem
def self.root
File.expand_path '../..', __FILE__
end
end
Ruby 2.0引入了Kernel#__dir__
方法;它可以实现更短的解决方案:
# your_gem.rb
module YourGem
def self.root
File.dirname __dir__
end
end
如果您需要访问其他目录,可以简单地构建root
:
module YourGem
def self.bin
File.join root, 'bin'
end
def self.lib
File.join root, 'lib'
end
end
答案 1 :(得分:27)
这是可执行文件和库的通用解决方案。它使用Gem API加载规范,因此路径始终是正确的:
spec = Gem::Specification.find_by_name("your_gem_name")
gem_root = spec.gem_dir
yaml_obj = YAML.load(gem_root + "/file_name.yaml")
答案 2 :(得分:6)
gem list <gem> -d
或者如果您使用的是bundler:
bundle show <gem>