44 votes

Comment trouver le chemin d'un Rubis Gemme est installé à l' (c'est à dire Gem.lib_path c.f. Gem.bin_path)

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

Sera de retour le binaire/exécutable du chemin. Il semble qu'il n'y a pas de telle fonction pour retourner le chemin de la bibliothèque. Qui dans ce cas serait, idéalement, le retour:

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

Ai-je raté quelque chose ou est-il un simple/une méthode de façon à obtenir cette information?

Mise à jour: Pas de CLI ou non stdlib suggestions s'il vous plaît.

76voto

user1182000 Points 736

Le problème avec les bagages réponse est que vous devez "exiger" la rubygem ou il ne fonctionnera pas. Souvent c'est undesireable parce que si vous travaillez avec un fichier exécutable gem, vous ne voulez pas "besoin" ou vous aurez un tas de mises en garde.

C'est une solution universelle pour les exécutables et les bibliothèques:

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

Si vous voulez vraiment faire de la technique, il n'y a pas seulement un répertoire lib. Le gemspec a un "require_paths" tableau de tous les répertoires de recherche (ajouté à $LOAD_PATH). Donc, si vous voulez un tableau de la require_paths, utilisez ceci:

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

Pas besoin de bundler.

23voto

Guy Points 414

Après le gem a été chargé avec l'exigent, vous trouverez la lib chemin à l'aide de Gem.loaded_specs comme suit:

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

15voto

Andrew Grimm Points 22996

Je ne suis pas sûr de savoir pourquoi vous êtes en train de faire cela, mais si vous êtes sur la ligne de commande, utilisez gem env.

4voto

jonnii Points 17046

Essayez d'utiliser bundle show cucumber.

Qui, en regardant la source de la fagoteuse fait quelque chose comme:

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

Vous êtes à l'aide de bundler, droit?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X