rails - win ruby




如何找到安裝Ruby Gem的路徑(即Gem.lib_path cf Gem.bin_path) (3)

嘗試使用bundle show cucumber

其中,從查看bundler的來源做了類似的事情:

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

正在使用捆綁器,對嗎?

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

將返回二進制/可執行文件的路徑。 似乎沒有這樣的函數來返回庫路徑。 在這種情況下,理想情況下會返回:

/home/hedge/.rvm/gems/[email protected]/gems/cucumber-0.10.0/lib

我是否遺漏了某些內容,或者是否有簡單/一種方法來獲取此信息?

更新:請不要CLI或非stdlib建議。


在gem加載了require之後,你會發現使用Gem.loaded_specs的lib路徑如下:

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

檢查答案的問題是你必須“要求”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]

不需要捆綁。





rubygems