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?
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.
Essayez d’ajouter --user-install
au lieu d’utiliser Sudo
:
gem install mygem --user-install
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:
Pourquoi ne fais-tu pas:
Sudo gem update --system
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.
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.
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
}
Copiez le chemin dans votre profil et enregistrez-le
Rechargez votre profil (source ~/.zshenv pour moi)
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
Sudo gem update --system
Sudo gem install (gemfile)
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
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:
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.
J'ai trouvé ce tutoriel pour Sudo
less Gem :
brew install rbenv Ruby-build
Sudo gem update --system
ajouter des exportations à .bashrc
:
export RBENV_ROOT="$(brew --prefix rbenv)"
export GEM_HOME="$(brew --prefix)/opt/gems"
export GEM_PATH="$(brew --prefix)/opt/gems"
Et ajoutez enfin ceci à votre ~/.gemrc
:
gem: -n/usr/local/bin
gem update --system
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
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
...
Sudo
ing n'est pas requis et vous pouvez utiliser le Ruby déjà installé, avec la permission de Apple.
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.
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:
Installez Homebrew:
/usr/bin/Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Installez Ruby:
brew install Ruby
Installez Compass:
Sudo gem install compass
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.
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.
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.
Travaille pour moi:
Sudo gem uninstall cocoapods
Sudo gem install cocoapods
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!
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
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...
Sudo chown -R $USER /Library/Ruby/Gems/
donne à l'utilisateur $ whoami de créer quelque chose dans ces dossiers
Sudo chown -R user /Library/Ruby/Gems/2.0.0
Testé sur MacOS Mojave AVEC SUCCÈS:
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
Installez la nouvelle version de Ruby:
$ brew install Ruby
Définissez un alias par défaut pour votre version:
$ rvm alias create default Ruby
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
.