171 votes

'sudo gem install' ou 'gem install' et les emplacements des gemmes

Running sudo gem list --local et gem list --local ' me donnent des résultats différents. Le chemin de mes gemmes est fixé à mon dossier personnel et ne contient que les gemmes de ' gem list --local '.

Il n'est probablement pas bon d'avoir des gemmes installées dans différents répertoires sur mon ordinateur, donc je devrais avoir le chemin des gemmes défini différemment, et je devrais 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.

2 votes

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.

1 votes

En rapport : stackoverflow.com/questions/21141584/ . 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 .

4 votes

"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 nécessite des privilèges Root, soit pour être installée, soit pour s'exécuter, est très suspecte. Les gemmes devraient pouvoir fonctionner dans un bac à sable et s'exécuter avec les autorisations de l'utilisateur.

164voto

Nils Points 1885

Vous pouvez également installer des gems dans votre environnement local (sans sudo ) avec

gem install --user-install <gemname>

Je le recommande afin de ne pas perturber la configuration de votre système, même s'il s'agit d'un ordinateur mono-utilisateur.

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

Si vous avez besoin que des binaires provenant d'installations locales soient ajoutés à votre chemin, vous pouvez ajouter quelque chose à votre bashrc comme :

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

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

30 votes

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

1 votes

Je suis en train de créer une gemme et selon les manuels je dois faire rake install et pour corriger l'isse sudo, j'ai dû patcher manuellement le fichier /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_‌​helper.rb en ajoutant --user-install là. Je n'ai pas trouvé de meilleure solution, car il semble que rake install n'accepte pas de paramètres supplémentaires.

0 votes

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 les privilèges sudo. Cette commande a fonctionné !!!!

154voto

jonnii Points 17046

Contrairement à tous les autres messages, je suggère de NE PAS utiliser sudo lors de l'installation des gemmes.

Je vous recommande plutôt d'installer RVM et commencez une vie heureuse avec des maisons de pierres précieuses portables et différentes versions de Ruby vivant toutes sous le même toit.

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

RVM est un outil en ligne de commande qui nous permet d'installer, de gérer et de travailler facilement avec plusieurs environnements ruby et ensembles de gemmes.

La raison pour laquelle l'installation de gemmes avec sudo est pire que juste gem install est parce qu'il installe les gemmes pour TOUS LES UTILISATEURS comme root . Cela peut convenir si vous êtes la seule personne à utiliser la machine, mais si ce n'est pas le cas, cela peut causer des problèmes.

Si vous décidez de faire disparaître toutes vos pierres précieuses 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 parce que chaque version de Ruby que vous installez par l'intermédiaire de RVM a son propre GEM_HOME.

De plus, il est bon de rendre votre environnement de développement aussi proche que possible de votre environnement de production, et en production vous installerez très probablement les gems en tant qu'utilisateur non-Root.

15 votes

+1 pour la suggestion de rvm, mais -1 pour la condamnation confuse de la possibilité alternative d'utiliser simplement sudo.

10 votes

D'accord, mais toutes vos raisons se résument à "parce que RVM est si génial" et non parce que l'utilisation de sudo est particulièrement nuisible. La seule fois où vous ne voudriez pas le faire est dans la situation spécifique où vous êtes sur un ordinateur partagé. Si vous voulez recommander rvm, faites-le. Pas besoin de recourir au FUDD.

7 votes

J'essaie de ne pas répandre la confusion, et j'ai essayé de donner des raisons non RVM, je m'excuse si cela semble être le cas.

42voto

allyraza Points 1102

Mieux encore, mettez --user-install dans votre fichier ~/.gemrc afin de ne pas avoir à le taper à chaque fois.

gem: --user-install

18voto

David Salamon Points 1309

Au cas où vous

  • installé ruby gems avec sudo
  • vous voulez installer les gems sans sudo
  • je ne veux pas installer rvm/rbenv

ajoutez ce qui suit à votre .bash_profile :

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

Ouvrez un nouvel onglet dans le Terminal OU source ~/.bash_profile et vous êtes prêt à partir !

11 votes

Pour quelqu'un qui ne travaille pas avec Ruby, Rails, Rake, et tout ce que les développeurs Ruby utilisent / veulent utiliser, CETTE solution est beaucoup plus facile que d'utiliser rvm. Je ne me soucie vraiment pas d'avoir différentes versions de ruby, je veux juste exécuter quelques programmes shell distribués en tant que gems. Je vous remercie !

11voto

Tasos Koutoumanos Points 413
sudo gem install --no-user-install <gem-name>

installera votre gemme à l'échelle mondiale c'est-à-dire qu'il sera disponible pour tous les contextes de l'utilisateur.

1 votes

Il peut également écraser une gemme installée par le fournisseur, dont le système d'exploitation peut s'attendre à ce qu'elle soit réglée sur une version spécifique. Cela pourrait casser le code qui en dépend.

3 votes

...ou bien il pourrait installer un programme qu'un fournisseur ne fournit pas, et le faire de manière à ce qu'il soit disponible pour tous les utilisateurs d'un système. Il est légèrement aggravant que toutes les réponses supposent que le lecteur est un développeur plutôt qu'un administrateur système qui est réellement un développeur. fait veulent mettre une version spécifique d'une gemme à la disposition de tous les utilisateurs. :D

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