27

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

4

3 回答 3

31

给定以下项目结构:

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
于 2012-04-13T00:41:33.070 回答
30

这是可执行文件和库的通用解决方案。它使用 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")
于 2012-04-18T03:26:39.580 回答
5

gem list <gem> -d

或者,如果您使用的是捆绑器:

bundle show <gem>

于 2012-04-12T22:47:51.830 回答