2010-09-10 18 views
4

Je souhaite configurer gem pour utiliser uniquement les gemmes du système - jamais celles du $HOME/.gem. C'est parce que j'écris un script qui va accéder à Gem.path et je ne veux pas qu'il renvoie le chemin vers les gems dans mon répertoire personnel.Comment puis-je configurer gem pour n'utiliser que des gemmes système?

Je suis sûr que je ne l'ai pas explicitement mis en GEM_HOME ou quelque chose comme ça dans mon .bashrc, .bash_login etc.

Mais Gem.path retourne mes pierres précieuses homedir premier:

irb 
> Gem.path 
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"] 

Puis-je arrêter ce d'arriver? Où est-il configuré? Ou est-ce juste le défaut de regarder dans homedir en premier?

Si je ne peux pas configurer cela, puis-je retourner le chemin du système pour les gemmes avec hackery regexp?

Plus de détails:

which ruby 
/usr/local/bin/ruby 
ruby --version 
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] 

gem env 
    - RUBYGEMS VERSION: 1.3.7 
    - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux] 
    - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1 
    - RUBY EXECUTABLE: /usr/local/bin/ruby 
    - EXECUTABLE DIRECTORY: /usr/local/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-linux 
    - GEM PATHS: 
    - /usr/local/lib/ruby/gems/1.9.1 
    - /home/nfm/.gem/ruby/1.9.1 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 

Mise à jour: cela ne semble pas

# Note the use of a symbol before the colon - the string version doesn't work! 
:gempath: 
    - /usr/local/lib/ruby/gems/1.9.1 

Cependant, pour prendre effet si:

Donc, apparemment, cela peut être configuré en ~/.gemrc vous allumez irb. Cela a quelque chose à voir avec le fait que le fichier de configuration est YAML, et apparemment yaml n'est pas chargé lorsque irb démarre (pas sûr sur celui-ci!):

$ irb 
> Gem.path 
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"] 
> Gem.configuration.path 
=> ["/usr/local/lib/ruby/gems/1.9.1"] 
# Ready for a WTF moment? 
> Gem.path 
=> ["/usr/local/lib/ruby/gems/1.9.1"] 

Alors, la réponse ci-dessous semble être le seul façon cohérente d'obtenir le bon comportement, même si vous supposer que ~/.gemrc fonctionnerait et serait une meilleure façon de vous emballer config.

Cependant, la mise en :gempath: dans mon ~/.gemrc a travaillé dans le cadre du scénario étant dans mon Rakefile dans une application Rails, probablement parce que YAML est explicitement chargé.

Je ne sais pas exactement ce qui se passe avec yaml, mais cette explication semble cohérente avec ce que je vois ici.

Modifiez! : P

Répondre

4

ici écraser:

#in ~/.bashrc 
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1 
+0

Après bidouiller pendant un certain temps, cela ne semble être la seule façon d'obtenir le comportement correct. Voir la question mise à jour pour une explication de pourquoi la config dans '.gemrc' n'a pas fonctionné pour moi. – nfm