Как найти путь, по которому установлен Ruby Gem (т.е. Gem.lib_path c.f. Gem.bin_path) - PullRequest
44 голосов
/ 08 марта 2011
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.

Ответы [ 4 ]

75 голосов
/ 10 апреля 2012

Проблема с проверенным ответом состоит в том, что вы должны «потребовать» rubygem, иначе он не будет работать.Часто это нежелательно, потому что, если вы работаете с исполняемым гемом, вам не нужно его «требовать», иначе вы получите кучу предупреждений.

Это универсальное решение для исполняемых файлов и библиотек:

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

Если вы хотите получить действительно техническую информацию, не существует только одного каталога lib.В gemspec есть массив require_paths всех каталогов для поиска (добавлен в $ LOAD_PATH).Итак, если вам нужен массив require_paths, используйте это:

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

Нет необходимости в компоновщике.

23 голосов
/ 06 апреля 2011

После того, как гем был загружен с помощью require, вы найдете путь к lib, используя Gem.loaded_specs, следующим образом:

require 'rubygems'
require 'cucumber'
gem_root = Gem.loaded_specs['cucumber'].full_gem_path
gem_lib = File.join(gem_root, 'lib')
15 голосов
/ 08 марта 2011

Я не уверен, почему вы это делаете, но если вы в командной строке, используйте gem env.

4 голосов
/ 08 марта 2011

Попробуйте использовать bundle show cucumber.

Что, глядя на источник пакета, делает что-то вроде:

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

Вы используете пакет, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...