2010-01-22 2 views
109

En cours d'exécution 'sudo gem list --local' et 'gem list --local' me donnent des résultats différents. Mon chemin gem est défini sur mon dossier personnel et contient uniquement les gemmes de 'gem list --local'.'sudo gem install' ou 'gem install' et les emplacements de pierres précieuses

Il n'est probablement pas bon d'avoir des gemmes installées dans différents répertoires sur mon ordinateur, donc devrais-je avoir le chemin gemme défini différemment, et dois-je toujours utiliser sudo lors de l'installation de quelque chose?

my ~/.profile 
export PATH=/opt/local/bin:/opt/local/sbin:$PATH 
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH" 

~/.bash_profile est vide.

+0

Je pense que c'est une question valide pour ceux d'entre nous qui doivent utiliser une gemme qui nécessite des privilèges root. – Kelly

+0

Connexe: http://stackoverflow.com/questions/21141584/rails-is-not-using-my-global-ruby-version. J'utilise rbenv pour gérer les versions de Ruby et j'ai rencontré un problème parce que j'ai utilisé 'sudo gem install rails' au lieu de' gem install rails'. – Dennis

+3

"Je pense que c'est une question valable pour ceux d'entre nous qui doivent utiliser une gemme qui nécessite des privilèges root." Je pense que toute gemme qui a besoin de privilèges root, que ce soit pour l'installer ou pour l'exécuter, est hautement suspecte.Les gemmes devraient pouvoir s'exécuter dans un bac à sable et s'exécuter avec les permissions de l'utilisateur. –

Répondre

129

Contrairement à tous les autres messages, je suggère de ne pas utiliser sudo lors de l'installation de gemmes. Au lieu de cela, je vous recommande d'installer RVM et de commencer une vie heureuse avec des maisons de pierres précieuses portables et une version différente de Ruby vivant sous un même toit.

Pour les non-initiés, de the documentation:

RVM est un outil de ligne de commande qui nous permet d'installer facilement, de gérer et de travailler avec de multiples environnements de rubis et ensembles de pierres précieuses.

La raison pour laquelle l'installation des pierres précieuses avec sudo est pire que juste gem install est parce qu'il installe les pierres précieuses pour TOUS LES UTILISATEURS comme root. Cela pourrait être bien si vous êtes la seule personne à utiliser la machine, mais si ce n'est pas le cas, cela peut causer de l'étrangeté.

Si vous décidez de supprimer toutes vos gemmes et de recommencer, il est beaucoup plus facile et plus sûr de le faire en tant qu'utilisateur non root.

Si vous décidez d'utiliser RVM puis en utilisant sudo causera toutes sortes de bizarreries, car chaque version Ruby vous installez par RVM a son propre GEM_HOME. De plus, il est bon que vous puissiez rendre votre environnement de développement le plus proche possible de votre environnement de production, et en production, vous installerez très probablement des gems en tant qu'utilisateur non root.

+11

+1 pour le RVM suggérer, mais -1 pour la condamnation confuse de la possibilité alternative d'utiliser simplement sudo – tfwright

+0

Ce n'est vraiment pas si confus. http://rvm.beginrescueend.com/gems/ – jonnii

+0

@floyd, mis à jour le poste avec plus de raisons de ne pas utiliser sudo. – jonnii

93

Vous pouvez également installer des pierres précieuses dans votre environnement local (sans sudo) avec

gem install --user-install <gemname> 

Je recommande que si vous ne jouez pas avec votre configuration au niveau du système, même si elle est un ordinateur mono-utilisateur.

Vous pouvez vérifier où vont les gemmes en regardant gempaths avec gem environment. Dans mon cas c'est "~/.gem/ruby ​​/ 1.8".

Si vous avez besoin des binaires de installations locales ajoutés à votre chemin, vous pouvez ajouter quelque chose à votre bashrc comme:

if which ruby >/dev/null && which gem >/dev/null; then 
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" 
fi 

(de http://guides.rubygems.org/faqs/#user-install)

+16

+1 pour cette option plutôt que les solutions "Yet Another Configuration Tool" ci-dessus, RBENV/RVM. – jjpe

+0

Je crée une gemme et selon les manuels je dois faire 'rake install' et pour corriger le sudo isse, j'ai dû corriger manuellement' /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb' en y ajoutant '--user-install'. Impossible de trouver une meilleure solution, car il semble que 'rake install' n'accepte pas de paramètres supplémentaires. – Nakilon

+0

Je suis absolument ravi de cette première commande. J'ai essayé d'installer des gemmes et j'ai eu des problèmes parce que je n'ai pas de privilèges sudo. Cette commande a fonctionné !!!! –

2

Vous pouvez installer des pierres précieuses dans un dossier spécifique (exemple fournisseur /) dans votre application Rails en utilisant:

bundle install --path vendor 
+0

Ceci. Ces jours-ci, le seul programme qui devrait avoir besoin de sudo pour installer le logiciel est votre gestionnaire de paquets. – tjbp

3
sudo gem install --no-user-install <gem-name> 

va installer votre gemme globalement, c'est-à-dire qu'il sera disponible pour tous les contextes de l'utilisateur.

+0

Il peut également écraser un gem installé par le fournisseur, que ce système d'exploitation peut s'attendre à définir sur une version spécifique. Et cela pourrait casser le code qui repose dessus. –

7

connexes (pour les utilisateurs Bundler), si vous voulez un briquet alternative à RVM qui mettra tout dans un répertoire bien connu spécifique à l'utilisateur, je recommande d'utiliser:

bundle install --path $HOME/.gem 

si vous souhaitez installer des pierres précieuses pour au même endroit que

gem install --user-install GEMNAME 

les installera, .gem/ruby/RUBYVERSION dans votre répertoire personnel. (Voir l'autre commentaire sur cette question sur --user-install.)

Cela rendra les gemmes visibles à gem list, installable via gem uninstall, etc., sans avoir accès sudo. scripts exécutables installés par gemme ou Bundler peuvent être mis dans votre chemin en ajoutant

$HOME/.gem/ruby/RUBYVERSION/bin 

à votre $PATH. gem lui-même vous dit à ce sujet s'il n'est pas défini lorsque vous faites gem install --user-install.

26

Mieux encore, mettre --user-install dans votre fichier ~/.gemrc de sorte que vous ne devez pas taper à chaque fois que

gem: --user-install 
5

Si vous

  • pierres précieuses rubis installés avec sudo
  • voulez installer gems sans sudo
  • ne veulent pas installer rvm/rbenv

ajouter ce qui suit à votre .bash_profile:

export GEM_HOME=/Users/‹your_user›/.gem 
export PATH="$GEM_HOME/bin:$PATH" 

Ouvrir un nouvel onglet dans le Terminal OU source ~/.bash_profile et vous êtes bon pour vous!

+2

Pour quelqu'un qui ne travaille pas avec Ruby, Rails, Rake et tout ce que Ruby Devs utilise/veut utiliser CETTE solution est beaucoup plus simple que l'utilisation de rvm. Je ne me soucie pas vraiment d'avoir des versions différentes de ruby ​​je veux juste exécuter des programmes shell distribués comme des gemmes. Je vous remercie! –

Questions connexes