如何find安装Ruby Gem的path(即Gem.lib_path cf Gem.bin_path)

Gem.bin_path('cucumber', 'cucumber') 

将返回二进制/可执行文件的path。 似乎没有这样的函数来返回库path。 在这种情况下,理想情况下,返回:

 /home/hedge/.rvm/gems/ruby-1.9.2-p136@bbb-bdd-meta-bdd/gems/cucumber-0.10.0/lib 

我错过了什么或有一个简单/一种方法来获取这些信息?

更新:请不要使用CLI或非stdlibbuild议。

检查答案的问题是,你必须“要求”rubygem或它不会工作。 通常这是不可取的,因为如果你正在使用一个可执行的gem,你不想“要求”它,否则你会得到一堆警告。

这是可执行文件和库的通用解决scheme:

 spec = Gem::Specification.find_by_name("cucumber") gem_root = spec.gem_dir gem_lib = gem_root + "/lib" 

如果你想得到真正的技术,不只有一个lib目录。 gemspec有一个要search的所有director的“require_paths”数组(加到$ LOAD_PATH中)。 所以,如果你想要一个require_paths的数组,使用这个:

 gem_lib = gem_root + "/" + spec.require_paths[0] 

不需要捆绑器。

在gem加载require之后,你会find使用Gem.loaded_specs的libpath,如下所示:

 require 'rubygems' require 'cucumber' gem_root = Gem.loaded_specs['cucumber'].full_gem_path gem_lib = File.join(gem_root, 'lib') 

我不知道你为什么这样做,但如果你在命令行上,使用gem env

尝试使用bundle show cucumber

从查看捆绑软件的来源来看,其实是这样的:

 spec = Bundler.load.specs.find{|s| s.name == name } spec.full_gem_path 

正在使用捆绑器,对吗?