Question L'installation de gem ou la mise à jour de RubyGems échoue avec une erreur d'autorisation


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

ERREUR: Pendant 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 a-t-il une idée de comment résoudre ceci?


426
2018-01-30 15:10


origine


Réponses:


Vous ne disposez pas d'autorisations en é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 usage personnel. Bien que ce soit OK pour apporter des modifications mineures à cela si tu sais ce que tu fais, parce que 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 vais vous suggérer fortement d'utiliser soit Rbenv ou RVM pour gérer un Ruby séparé, installé dans un bac à sable dans votre répertoire personnel, que vous pouvez modifier / plier / broche / modifier sans vous soucier de gâcher le système Ruby.

Entre les deux, j'utilise rbenv, bien que j'aie beaucoup utilisé RVM par le passé. rbenv adopte une approche plus «maniable» pour gérer votre installation Ruby. RVM a beaucoup de fonctionnalités et est très puissant, mais par conséquent plus intrusif. Dans tous les cas, LIS la documentation d'installation pour eux deux fois avant de commencer l'installation, selon votre choix.


256
2018-01-30 15:36



Essayez d'ajouter --user-install à la place d'utiliser sudo:

gem install mygem --user-install

197
2017-07-08 04:55



Vous devriez vraiment utiliser un gestionnaire de version Ruby.

L’utilisation correcte de celui-ci empêcherait et pourrait résoudre votre problème de permission lors de l’exécution d’un gem update commander.

je recommande Rbenv.

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

Si vous le faites, et que vous utilisez rbenv, vérifiez simplement que ~/.rbenv/shims Le répertoire est devant 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 Ruby bin système, puis modifiez votre ~/.bashrc fichier et mettez ceci comme votre dernière commande PATH d'exportation: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v  vous montre quelle version de Ruby vous utilisez

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

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

$ rbenv global 1.9.3-p448  me fait passer à une version plus récente et 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 le Gem :: FilePermissionError)

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

En général, vous ne devriez pas avoir à préface une commande gem 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:


82
2017-09-01 02:40



Pourquoi tu ne fais pas:

sudo gem update --system

74
2018-06-21 09:30



Pour moi, le problème était dû à l'utilisation rbenv et oublier de définir la bonne version globalement.

Donc je devais le mettre avec rbenv global xxx

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

rbenv global 2.0.0-p247
rbenv rehash

Alors tout fonctionnait bien.


26
2017-10-21 22:34



sudo gem update --system
sudo gem install (gemfile)

17
2017-08-05 13:58



Vous devez corriger vos chemins

Pour déterminer si ce correctif fonctionnera, procédez comme suit:

which gem

Cela devrait afficher un répertoire pour lequel vous n'avez pas les permissions:

/usr/bin/gem

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

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

    rbenv init -
    

La première ligne de la sortie est la ligne à copier sur 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 vers votre profil et enregistrez-le

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

  3. Courir rbenv rehash

Maintenant, quand tu cours which gem Vous devez obtenir un chemin d'accès local pour lequel vous disposez des autorisations suivantes:

/Users/justin/.rbenv/shims/gem

17
2017-10-29 21:38



Il existe deux voies: Utilisez soit rbenv ou RVM. Il y a des recettes pour les deux ci-dessous. Avant de le faire, vous souhaiterez probablement désactiver l’installation de documents locaux pour les gemmes.

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

Alors:

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 soucier de la sécurité du système, et vous passerez plus de temps à comprendre les problèmes que vous pourriez rencontrer, que simplement à éviter le problème avec lequel vous avez commencé. Apprenez InfoSec plus tard, lorsque vous en saurez plus sur le système d'exploitation et la programmation.

Pour une alternative, utilisez plutôt "RVM": installez rvm courir:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Cela a le même résultat, vous vous retrouvez avec un système local Ruby and Gem qui n'interfère pas avec les versions du système. Il n'y a pas besoin de Homebrew, ni de librairies système, etc.


14
2017-08-03 23:23



Essayer la réponse de nathanwhy avant d'utiliser ma réponse originale ci-dessous. Sa recommandation de --user-install devrait accomplir le même but sans avoir à se faufiler avec votre .bash_profile ou déterminez votre version ruby.


Si vous n'êtes pas concerné par une version spécifique de Ruby, vous pouvez ignorer la options de gestionnaire d'environnement ruby ​​lourd-ascenseur, et ajoutez 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
  ...

Non sudoest nécessaire, et vous pouvez utiliser le ruby ​​déjà installé, gracieuseté d'Apple.


13
2017-08-15 17:07



J'avais besoin de faire un rbenv rehash donc cela indiquerait ma bibliothèque locale de gemmes.

Il semble que votre gestionnaire de gemmes pointe vers la bibliothèque système, donc, au lieu de jouer avec les permissions, faites l'équivalent de "rehash" pour que votre gestionnaire fasse avancer les choses localement.


12
2017-11-10 18:10



j'ai trouvé ce comment-pour sudomoins de gemme:

  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 enfin, ajoutez ceci à votre ~/.gemrc:

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


12
2017-10-14 21:41