web-dev-qa-db-fra.com

L'installation de Gem ou la mise à jour de RubyGems échoue avec une erreur d'autorisations

Essayer d'installer une gemme (gem install mygem) ou de mettre à jour RubyGems (gem update --system) échoue avec cette erreur:

 ERREUR: lors de l'exécution de gem ... (Gem :: FilePermissionError) 
 Vous ne disposez pas d'autorisations en écriture pour le répertoire /Library/Ruby/Gems/2.0.0 .

Quelqu'un ayant une idée comment résoudre ce problème?

477
Gaurav

Vous n'avez pas les autorisations d'écriture dans le répertoire /Library/Ruby/Gems/1.8.

signifie exactement cela, vous n'avez pas la permission d'écrire là-bas.

C’est la version de Ruby installée par Apple, pour leur propre usage. Bien que vous puissiez y apporter des modifications mineures si vous savez ce que vous faites, car vous n'êtes pas sûr du problème des autorisations, je dirais que ce n'est pas une bonne idée de continuer sur cette voie.

Au lieu de cela, je vous suggère fortement d’envisager d’utiliser rbenv ou RVM pour gérer un Ruby distinct, installé dans un bac à sable de votre répertoire personnel, que vous pouvez modifier/fold/spindle/change sans se soucier de gâcher le système Ruby.

Entre les deux, j'utilise rbenv, bien que j'aie utilisé beaucoup de RVM par le passé. rbenv adopte une approche plus "autonome" dans la gestion de votre installation Ruby. RVM a beaucoup de fonctionnalités et est très puissant, mais est donc plus intrusif. Dans les deux cas, LISENT la documentation d'installation à leur intention plusieurs fois avant de commencer l'installation, selon votre choix.

286
the Tin Man

Essayez d’ajouter --user-install au lieu d’utiliser Sudo:

gem install mygem --user-install
303
nathanwhy

Vous devriez vraiment utiliser un gestionnaire de versions Ruby.

En utiliser un correctement permettrait d'éviter et de résoudre votre problème d'autorisation lors de l'exécution d'une commande gem update.

Je recommande rbenv.

Toutefois, même lorsque vous utilisez un gestionnaire de versions Ruby, vous pouvez toujours recevoir le même message d'erreur.

Si vous le faites et que vous utilisez rbenv, vérifiez simplement que le répertoire ~/.rbenv/shims est avant le chemin du système Ruby.

$ echo $PATH vous montrera l'ordre de votre chemin de chargement.

Si vous trouvez que votre répertoire shims vient après votre répertoire système Ruby bin, éditez votre fichier ~/.bashrc et mettez-le comme votre dernière commande d'exportation PATH: export PATH=$HOME/.rbenv/shims:$PATH

$ Ruby -v vous indique quelle version de Ruby vous utilisez

Cela montre que j'utilise actuellement la version système de Ruby (généralement pas bonne)

$ Ruby -v
Ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 me permet de passer à une version plus récente, préinstallée (voir les références ci-dessous).

Cela montre que j'utilise une version plus récente de Ruby (qui ne causera probablement pas Gem :: FilePermissionError)

$ Ruby -v
Ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

En règle générale, vous ne devriez pas avoir besoin de faire précéder une commande de gemme avec Sudo. Si vous en ressentez le besoin, quelque chose est probablement mal configuré.

Pour plus de détails sur rbenv, voir ce qui suit:

87
l3x

Pourquoi ne fais-tu pas: 

Sudo gem update --system
75
Bobz

Pour moi, le problème était dû à l’utilisation de rbenv et à l’oubli de la définition correcte de la version globale.

J'ai donc dû le configurer avec rbenv global xxx

Dans mon cas, j'ai installé 2.0.0-p247 et j'ai donc dû lancer la commande:

rbenv global 2.0.0-p247
rbenv rehash

Ensuite, tout fonctionnait bien.

29
Hendrik

Vous devez corriger vos chemins

Pour déterminer si ce correctif fonctionnera, exécutez ce qui suit:

which gem

Cela devrait générer un répertoire pour lequel vous n'avez pas les autorisations:

/usr/bin/gem

Pour résoudre ce problème, procédez comme suit.

  1. Déterminez le chemin à copier dans votre profil:

    rbenv init -
    

La première ligne de la sortie est la ligne que vous devez copier dans votre profil:

export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
rbenv rehash 2>/dev/null
rbenv() {
  typeset command
  command="$1"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  rehash|Shell)
    eval `rbenv "sh-$command" "$@"`;;
  *)
    command rbenv "$command" "$@";;
  esac
}
  1. Copiez le chemin dans votre profil et enregistrez-le 

  2. Rechargez votre profil (source ~/.zshenv pour moi)

  3. Exécuter rbenv rehash

Maintenant, lorsque vous exécutez which gem, vous devriez obtenir un chemin local sur lequel vous disposez des autorisations suivantes:

/Users/justin/.rbenv/shims/gem
21
Justin Leveck
Sudo gem update --system
Sudo gem install (gemfile)
17
Eliot Arntz

Cela résoudra le problème sur MacOs Mojave de manière propre:

brew install Ruby

Puis définissez GEM_HOME dans votre répertoire utilisateur. Sur le terminal:

Bash:

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

OU si Zsh:

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
14
Fmessina

Il existe deux itinéraires: Utilisez soit rbenv, soit RVM. Il existe des recettes pour les deux ci-dessous. Avant de commencer, vous souhaiterez probablement désactiver l’installation de documents locaux pour les gemmes.

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

Ensuite:

install rbenv

install Ruby-build

courir: 

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

Cela installe une version à jour du système Gem dans vos répertoires locaux. Cela signifie que vous n'interférez pas avec la configuration du système. Si vous posez cette question, vous ne devriez pas vous préoccuper de la sécurité du système et vous passerez plus de temps à comprendre les problèmes que vous pourriez rencontrer que le simple fait d’éviter facilement le problème de départ. Apprenez InfoSec plus tard, lorsque vous en saurez plus sur le système d'exploitation et la programmation.

Pour une alternative, utilisez 'RVM' à la place: To install rvm run: 

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Le résultat est le même: vous vous retrouvez avec un système Ruby and Gem local qui n’interfère pas avec les versions du système. Il n’est pas nécessaire d’utiliser Homebrew, de surcharger les bibliothèques système, etc.

14
JezC

J'ai trouvé ce tutoriel pour Sudoless Gem :

  1. brew install rbenv Ruby-build
  2. Sudo gem update --system
  3. ajouter des exportations à .bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
    
  4. Et ajoutez enfin ceci à votre ~/.gemrc:

    gem: -n/usr/local/bin
    
  5. gem update --system

13
gopek

Cela a fonctionné pour moi. De plus, si vous avez déjà installé gems en tant que root, il résout ce problème en vous attribuant la propriété (davantage en termes de sécurité). 

Sudo chown -R `whoami` /Library/Ruby/Gems
13
thebiggestlebowski

Essayez la réponse de nathanwhy avant d’utiliser ma réponse originale ci-dessous. Sa recommandation de --user-install devrait atteindre le même objectif sans avoir à jeter votre .bash_profile ou à déterminer votre version de Ruby.


Si vous n'êtes pas préoccupé par une version spécifique de Ruby, vous pouvez ignorer les options du gestionnaire d'environnement heavy-lift Ruby et ajouter simplement ces lignes à ~/.bash_profile:

export GEM_HOME="$HOME/.gem/Ruby/2.0.0"
export GEM_PATH="$HOME/.gem/Ruby/2.0.0"

Le chemin est volé dans la sortie originale de gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - Ruby VERSION: 2.0.0
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - Ruby EXECUTABLE: /System/Library/.../2.0/usr/bin/Ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - Ruby
    - universal-darwin-14
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/mylogin/.gem/Ruby/2.0.0 # <-- This guy, right here.
     - /System/Library/.../usr/lib/Ruby/gems/2.0.0
  ...

Sudoing n'est pas requis et vous pouvez utiliser le Ruby déjà installé, avec la permission de Apple.

13
Michael

Je devais faire un rbenv rehash pour qu'il pointe vers ma bibliothèque Gem locale. 

Il semble que votre gestionnaire de gemmes pointe vers la bibliothèque système. Par conséquent, au lieu de jouer avec les autorisations, effectuez l'équivalent de "rehash" pour que votre responsable obtienne les informations localement.

12
bobbdelsol

J'avais formaté mon Mac et de nombreuses solutions suggérées ne fonctionnaient pas pour moi . Ce qui a fonctionné pour moi, ce sont ces commandes dans le bon ordre:

  1. Installez Homebrew:

    /usr/bin/Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Installez Ruby:

    brew install Ruby
    
  3. Installez Compass:

    Sudo gem install compass
    
11
Herbi Shtini

Plus vieux et plus sage

Ne faites pas ce que je dis ici, sachez simplement vous méfier chaque fois que vous utilisez Sudo. Vous voudrez probablement utiliser quelque chose comme rbenv pour isoler le travail que vous faites.


une façon

en savoir plus sur chown

Je ne sais pas si vous aimez la ligne de commande, mais cela facilitera le travail sur tout projet avec n'importe quel outil permettant d'installer des packages sur votre système.

chown pour autant que je sache, est synonyme de changement de propriétaire. 

La raison pour laquelle je suis venu chercher cette réponse est que gem install m'a lancé cette erreur aujourd'hui:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

C’est une occasion parfaite d’utiliser chown. Vous voyez que Ruby nous a donné le répertoire auquel il a besoin d'accéder, et il semble que ce soit un répertoire qu'il utilisera assez souvent.

Dans ce cas, il n’ya que trois choses à connaître pour résoudre le problème, mais chown est beaucoup plus puissant et vous accorde beaucoup plus de souplesse que ce que je vais démontrer maintenant. Veuillez vous reporter à la source en bas pour plus d'informations.

Les deux choses

  1. Username
  2. Annuaire

Si vous êtes dans un shell, trouver le nom d'utilisateur est facile. Il suffit de regarder l'invite. Le mien ressemble à:

breadly@breadly-desktop:~\Desktop

L'utilisateur actuel est juste le nom précédant le @. Nous connaissons le répertoire à partir des messages d'erreur, mais vous avez deux choix. Vous pouvez soit limiter votre autorisation à la version actuelle en utilisant ../gems/1.9.1, soit vous autoriser en écriture pour les gems de toutes les versions en utilisant ../gems.

La commande pour changer réellement de propriétaire ressemblerait à ceci.

chown -R $(whoami) /absolute/path/to/directory

-R est appelé un indicateur et l'indicateur -R indique généralement à une commande de faire quelque chose de manière récursive, ou en d'autres termes, exécutez la commande sur tout ce qui est contenu dans le répertoire et tout ce qui est contenu dans les répertoires qu'il contient jusqu'à ce qu'il n'y ait rien d'autre.

10
Breedly

Travaille pour moi:

Sudo gem uninstall cocoapods

Sudo gem install cocoapods
5
evya

Installez rbenv par brew install rbenv;

Puis mettez eval "$(rbenv init -)" à la fin de ~/.bash_profile (ou ~/.zshrc De MacOS);

Ouvrez un nouveau terminal et exécutez gem install *** fonctionnera!

4
zhao

Vérifiez si votre version de Ruby est correcte. Sinon, changez-le.

Cela fonctionne pour moi:

$ rbenv global 1.9.3-p547
$ gem update --system
3
Zen

Comme l'a souligné bobbdelsol, Rehash a fonctionné pour moi:

==> which Ruby
/usr/bin/Ruby

==> rbenv install 1.9.3-p551
Downloading Ruby-1.9.3-p551.tar.bz2...
-> https://cache.Ruby-lang.org/pub/Ruby/1.9/Ruby-1.9.3-p551.tar.bz2
Installing Ruby-1.9.3-p551...
Installed Ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551


==> which Ruby
/Users/username/.rbenv/shims/Ruby

==> which gem
/Users/username/.rbenv/shims/gem

==> gem install compass
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.


==> Ruby -v
Ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> Ruby -v
Ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> rbenv rehash


==> Ruby -v
Ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]


==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions.  This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...
2
Das

Sudo chown -R $USER /Library/Ruby/Gems/

1
vaskort

donne à l'utilisateur $ whoami de créer quelque chose dans ces dossiers

Sudo chown -R user /Library/Ruby/Gems/2.0.0
0
Rama Astadipati

Testé sur MacOS Mojave AVEC SUCCÈS:

  1. Désinstallez toutes vos anciennes versions de Ruby (disons que vous avez 2.00 et 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. Installez la nouvelle version de Ruby:

    $ brew install Ruby

  3. Définissez un alias par défaut pour votre version:

    $ rvm alias create default Ruby

  4. Redémarrez votre système car il s'agit de la manière la plus sûre pour votre ordinateur de charger la nouvelle version de Ruby, récemment installée.

APRÈS avoir terminé la procédure ci-dessus, vous pouvez exécuter avec succès n'importe quelle commande gem.

0
Marcelo Gumiero