problème d'autorisation d'installation de gem

90
qichunren@zhaobak:~> gem install hpricot
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 directory.

L'utilisateur de connexion actuel est qichunren, et l'utilisateur de qichunre a l'autorisation d'écriture avec .gem dir. Pourquoi mon gem commun veut d'abord installer des fichiers dans /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8

qichunren
la source

Réponses:

52

Pour une installation Ruby à l'échelle du système, devenez root. Par exemple:

$ sudo gem install hpricot

Cependant, l'approche moderne dans de nombreuses circonstances, y compris en développement, consiste à utiliser un outil qui vous permet d'installer et d'utiliser facilement Ruby en tant qu'utilisateur normal. Cela vous évite d'avoir à devenir root. Il existe quelques outils de ce type, et celui que j'utilise est RVM .

# install rvm into your ~
$ \curl -sSL https://get.rvm.io | bash -s stable

# install latest version of ruby into your ~
$ rvm install ruby

# installs a gem into your ~
$ gem install $SOME_GEM_NAME
Yfeldblum
la source
40
N'utilisez pas sudo car vous les installerez en tant que root et n'y aurez pas accès lorsque vous utilisez votre utilisateur normal. Utilisez RVM et gemsets.
Ryan
4
par exemplervm gem install hpricot
AJP
4
Vous voudrez peut-être supprimer cette réponse. Vous garderez les points et épargnerez aux gens beaucoup de maux de tête.
Olhovsky
172

Essayez de régler GEM_HOMEet GEM_PATHde ~/.gem,

Pour la session de terminal en cours, tapez simplement:

export GEM_HOME=~/.gem
export GEM_PATH=~/.gem

Si vous souhaitez qu'ils soient définis chaque fois que vous ouvrez un terminal, ajoutez les commandes ci-dessus à votre ~/.bashrcfichier.

Pour une solution plus complète de configuration d'un environnement Ruby personnalisé, consultez ce didacticiel de Site5KB , qui décrit l'utilisation d'un .gemrcfichier.

maigre
la source
11
C'est la vraie bonne réponse. N'allez pas utiliser sudo pour installer des choses si vous n'êtes pas obligé.
Jesse O'Brien
Le lien dans la réponse semble avoir changé. La première étape de ce guide a accompli la même chose pour moi: kb.site5.com/ruby-on-rails
Mike S
@MikeSlutsky Merci de l'avoir signalé. À l'avenir, si vous trouvez un lien cassé (ou un lien qui a changé et qui n'est plus pertinent), n'hésitez pas à soumettre une suggestion de "modification" si vous pensez avoir un remplaçant décent.
meagar
@meagar J'ai mis à jour le lien donné par @ Mike-Slutsky, mais j'ai remarqué qu'il s'agit d'une documentation de .gemrcconfiguration. Pour les novices en rubis, c'est intimidant, quand je comprends que votre solution est celle beaucoup plus simple que j'ai ajoutée. La solution fonctionne pour moi, mais en tant que novice en rubis, veuillez confirmer que mes modifications sont conformes à votre intention.
David LeBauer
1
N'oubliez pas d'ajouter votre GEM_PATH au PATH global. Voici ce que je fais:PATH=$HOME/.gems/bin:$HOME/bin:$PATH GEM_HOME=$HOME/.gems GEM_PATH=$HOME/.gems:/var/lib/gems/2.1.0:/usr/lib/ruby/gems/2.1.0 export PATH GEM_HOME GEM_PATH
Spone le
8

J'obtenais cette erreur sur mon serveur partagé via l'hébergement 1and1. ma solution a été d'ajouter l' --user-installoption, qui l'installe simplement pour votre utilisateur connecté (qui est tout ce dont vous avez besoin dans un environnement de serveur partagé); installation de sass

gem install sass --user-install
Max
la source
Fait intéressant, j'obtiens cette erreur bien que je l' ai spécifié --user-install.
sschuberth
4

Si vous utilisez rbenv et que cela se produit, vous devez ajouter ce qui suit à votre .bash_profile:

export RBENV_ROOT="$HOME/.rbenv"

if [ -d $RBENV_ROOT ]; then
  export PATH="$RBENV_ROOT/bin:$PATH"
  eval "$(rbenv init -)"
fi
Kevin Qi
la source
0

réinstaller ruby ​​résoudre mon problème.

brew install ruby
Jackyshan
la source