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


Answers

Essayez d'ajouter --user-install au lieu d'utiliser sudo :

gem install mygem --user-install
Question

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

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

Quelqu'un a-t-il une idée de comment résoudre ceci?




Bien que bon nombre de ces réponses soient correctes et fonctionnent, elles ne sont pas les plus correctes car elles représentent un ensemble de pratiques dangereuses, ou vous apprennent seulement comment résoudre ce problème.

Ne pas avoir les permissions d'écriture correctes pour un dossier est un problème courant qui vous gêne si vous installez des paquets Python, des paquets de nœuds, etc.

L'utilisation de sudo n'est pas sûre, car elle permet à l'installateur de faire ce qu'il veut et d'installer les choses où il veut. En bref, quelqu'un pourrait écrire un paquet qui installe une porte dérobée dans votre ordinateur et vole toutes vos informations de carte de crédit.

Utiliser un environnement virtuel comme rbenv est une bonne chose à apprendre, car cela vous permet d'empaqueter votre application et de l'expédier assez facilement. Je recommande fortement d'utiliser un environnement virtuel. De plus, si vous n'êtes pas qualifié avec un environnement virtuel, vous pouvez installer des paquets encore et encore partout sur votre système que vous pourriez simplement installer globalement et utiliser virtuellement. Je ne connais pas rbenv, mais je le fais beaucoup avec Virtualenv.

LA VÉRITÉ

La réponse est chown , et chown vous libérera.

Je ne sais pas si vous aimez la ligne de commande, mais cela rendra le travail sur n'importe quel projet avec n'importe quel outil qui installe des paquets à votre système un jeu d'enfant.

chown autant que je peux dire, signifie changement de propriété.

La raison pour laquelle je suis venu chercher cette réponse est parce que l' gem install jeté cette erreur chez moi 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 opportunité 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'y a que trois choses à savoir pour résoudre le problème, mais chown est beaucoup plus puissant et vous donne beaucoup plus de flexibilité que je ne le démontrerai maintenant. Veuillez vous référer à la source en bas pour plus d'informations.

Les deux choses

  1. Nom d'utilisateur
  2. Annuaire

Si vous êtes dans un shell, trouver le nom d'utilisateur est facile. Regardez simplement l'invite. La mienne ressemble à:

breadly@breadly-desktop:~\Desktop

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

La commande pour changer réellement la propriété ressemblerait à ceci.

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

Le -R est connu comme un drapeau et l'indicateur -R dit typiquement une commande pour faire quelque chose récursivement, ou en d'autres termes exécuter la commande sur tout ce qui est contenu dans le répertoire, et toutes les choses contenues dans les répertoires contenus dedans, et ainsi de suite jusqu'à ce qu'il n'y ait rien d'autre.




Il y a deux routes: Utilisez rbenv ou RVM. Il y a des recettes pour les deux ci-dessous. Avant cela, vous voulez 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 tromper avec la sécurité du système, et vous comprendrez mieux les problèmes que vous pourriez rencontrer, plutôt que d'avoir un moyen facile d'é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 'RVM' à la place: Pour installer rvm run:

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, ou de surcharger les bibliothèques système, etc.




Pourquoi ne faites-vous pas:

sudo gem update --system



J'avais besoin de faire un rbenv rehash afin qu'il pointe vers ma bibliothèque Gem locale.

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.




cd /Library/Ruby/Gems/2.0.0

ouvert

clic droit obtenir des informations

Verrouillage des clics

mot de passe

faites tout lire et écrire.




Travaille pour moi:

sudo gem uninstall cocoapods

sudo gem install cocoapods



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



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

Cela fonctionne pour moi:

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



J'ai utilisé cela et travaillé.

$ sudo chown myuser /var/lib/gems