Gem.bin_path('cucumber', 'cucumber')
将返回二进制/可执行文件的路径。 似乎没有这样的函数来返回库路径。 在这种情况下,理想情况下会返回:
/home/hedge/.rvm/gems/ruby-1.9.2-p136@bbb-bdd-meta-bdd/gems/cucumber-0.10.0/lib
我是否错过了某些内容,或者是否有简单/一种方法来获取此信息?
更新:请不要使用CLI或非stdlib建议。
答案 0 :(得分:75)
检查答案的问题是你必须“要求”rubygem或它不起作用。通常这是不可取的,因为如果你正在使用可执行的gem,你不想“需要”它,否则你会得到一堆警告。
这是可执行文件和库的通用解决方案:
spec = Gem::Specification.find_by_name("cucumber")
gem_root = spec.gem_dir
gem_lib = gem_root + "/lib"
如果你想获得真正的技术,那么不只有一个lib目录。 gemspec有一个要搜索的所有directorys的“require_paths”数组(添加到$ LOAD_PATH)。所以,如果你想要一个require_paths数组,请使用:
gem_lib = gem_root + "/" + spec.require_paths[0]
不需要捆绑包。
答案 1 :(得分: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')
答案 2 :(得分:15)
我不确定你为什么要这样做,但是如果你在命令行上,请使用gem env
。
答案 3 :(得分:4)
尝试使用bundle show cucumber
。
其中,从查看bundler的来源做了类似的事情:
spec = Bundler.load.specs.find{|s| s.name == name }
spec.full_gem_path
你是使用bundler,对吗?