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
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