寻找gem根

有没有办法知道我gem的根路径? 我试图从gems路径中的yaml加载默认配置。 如何使用ruby获取gems根目录?

鉴于以下项目结构:

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 

这是可执行文件和库的通用解决方案。 它使用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") 

gem list -d

或者,如果您使用的是bundler:

bundle show