web-dev-qa-db-fra.com

'Sudo gem install' ou 'gem install' et leurs emplacements

Fonctionnement 'Sudo gem list --local' et 'gem list --local 'donnez-moi des résultats différents. Mon chemin d'accès aux gemmes est défini dans mon dossier personnel et ne contient que les gemmes de 'gem list --local '.

Ce n’est probablement pas bien d’avoir installé des gemmes dans des répertoires différents sur mon ordinateur. Par conséquent, devrais-je configurer le chemin de la gemme différemment, et devrais-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.

132
raphael_turtle

Contrairement à tous les autres posts, je suggère de ne PAS utiliser Sudo lors de l'installation de gems.

Au lieu de cela, je vous recommande d'installer RVM et de commencer une vie heureuse avec des maisons portables à pierres précieuses et une version différente de Ruby, tous vivant sous le même toit.

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

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

La raison pour laquelle installer des gemmes avec Sudo est pire que simplement gem install est parce qu’il installe les gemmes pour TOUS LES UTILISATEURS comme root. Cela pourrait convenir si vous êtes la seule personne à utiliser la machine, mais si vous ne l'êtes pas, cela peut causer des problèmes d'é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 que vous voulez utiliser RVM alors utiliser Sudo causera toutes sortes d'étranges car chaque Ruby que vous installez avec RVM a son propre GEM_HOME.

En outre, c’est agréable si vous pouvez rendre votre environnement de développement aussi proche que possible de votre environnement de production. En production, vous devrez probablement installer gems en tant qu’utilisateur non root.

137
jonnii

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

gem install --user-install <gemname>

Je vous recommande de ne pas vous mêler de votre configuration au niveau du système, même s'il s'agit d'un ordinateur mono-utilisateur.

Vous pouvez vérifier où se trouvent les pierres précieuses en regardant gempaths avec gem environment. Dans mon cas c'est "~/.gem/Ruby/1.8".

Si vous avez besoin d'ajouter des binaires d'installations locales à votre chemin, vous pouvez ajouter quelque chose à votre base, 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 )

115
Nils

Mieux encore, mettez --user-install dans votre fichier ~/.gemrc afin que vous n'ayez pas à le saisir à chaque fois

gem: --user-install
32
allyraza

Au cas où vous

  • installé Ruby gems avec Sudo
  • vouloir installer des gemmes sans Sudo
  • ne veut 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 Terminal OR source ~/.bash_profile et vous êtes prêt à partir!

11
David Salamon

Dans le même ordre d'idées (pour les utilisateurs de groupeurs), si vous voulez une alternative plus légère à RVM qui mettra tout dans un répertoire bien connu de l'utilisateur, je vous recommande d'utiliser:

bundle install --path $HOME/.gem

si vous voulez installer des gemmes au même endroit que

gem install --user-install GEMNAME

va les installer, .gem/Ruby/RUBYVERSION dans votre homedir. (Voir l'autre commentaire sur cette question à propos de --user-install.)

Cela rendra les pierres précieuses visibles à gem list, désinstallable via gem uninstall, etc. sans avoir besoin de Sudo accès. Les scripts exécutables installés par gem ou bundler peuvent être placés dans votre chemin en ajoutant

$HOME/.gem/Ruby/RUBYVERSION/bin

à ton $PATH. gem lui-même vous en parle si elle n'est pas définie lorsque vous faites gem install --user-install.

8
Todd Vierling
Sudo gem install --no-user-install <gem-name>

installera votre bijou globalement, c’est-à-dire qu’il sera disponible dans tous les contextes de l’utilisateur.

6

Vous pouvez installer des gems dans un dossier spécifique (par exemple, vendeur /) dans votre Rails en utilisant:

bundle install --path vendor
2
Chadi