如何找到安装Ruby Gem的路径(即Gem.lib_path cf Gem.bin_path)

Hed*_*hog 44 ruby api rubygems

Gem.bin_path('cucumber', 'cucumber')
Run Code Online (Sandbox Code Playgroud)

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

/home/hedge/.rvm/gems/ruby-1.9.2-p136@bbb-bdd-meta-bdd/gems/cucumber-0.10.0/lib
Run Code Online (Sandbox Code Playgroud)

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

更新:请不要CLI或非stdlib建议.

小智 76

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

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

spec = Gem::Specification.find_by_name("cucumber")
gem_root = spec.gem_dir
gem_lib = gem_root + "/lib"
Run Code Online (Sandbox Code Playgroud)

如果你想获得真正的技术,那么不只有一个lib目录.gemspec有一个要搜索的所有directorys的"require_paths"数组(添加到$ LOAD_PATH).所以,如果你想要一个require_paths数组,请使用:

gem_lib = gem_root + "/" + spec.require_paths[0]
Run Code Online (Sandbox Code Playgroud)

不需要捆绑器.


Guy*_*Guy 23

在使用require加载gem之后,使用Gem.loaded_specs找到lib路径,如下所示:

require 'rubygems'
require 'cucumber'
gem_root = Gem.loaded_specs['cucumber'].full_gem_path
gem_lib = File.join(gem_root, 'lib')
Run Code Online (Sandbox Code Playgroud)


And*_*imm 15

我不确定你为什么要这样做,但如果你在命令行,请使用gem env.