Impossible d'installer les gemmes sur OS X «El Capitan»

182

Je ne suis pas en mesure d'installer et d'exécuter fakes3gem sur El Capitan Beta 5.

J'ai essayé:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Ensuite, j'ai essayé de le faire à la manière des cocoapodes. Cela a fonctionné pour les cocoapodes mais pas pour les faux3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Himanshu Yadav
la source
3
Ne l'utilisez pas sudopour installer Ruby ou pour changer les gemmes. Utilisez plutôt rbenv ou RVM pour installer et gérer Ruby. Lisez et suivez les instructions sur leurs sites respectifs. Et, dans les deux cas, après l'installation, ne l'utilisez pas à sudomoins que vous ne compreniez ce qui change et pourquoi vous voudriez le faire.
the Tin Man

Réponses:

333

Avertissement: @theTinMan et d'autres développeurs Ruby soulignent souvent qu'il ne faut pas l'utiliser sudolors de l'installation de gemmes et pointent vers des choses comme RVM . C'est absolument vrai lors du développement de Ruby. Allez-y et utilisez cela.

Cependant, beaucoup d' entre nous veulent juste un peu binaire qui arrive à distribuer comme une pierre précieuse (par exemple fakes3, cocoapods, xcpretty...). Je ne veux certainement pas me soucier de gérer un rubis séparé. Voici vos options les plus rapides:

Option 1: continuer à utiliser sudo

L'utilisation sudoest probablement bien si vous souhaitez que ces outils soient installés globalement.

Le problème est que ces binaires sont installés dans /usr/bin, ce qui est interdit depuis El Capitan. Cependant, vous pouvez les installer à la /usr/local/binplace. C'est là que Homebrew installe son matériel, donc il existe probablement déjà.

sudo gem install fakes3 -n/usr/local/bin

Les gemmes seront installées /usr/local/binet chaque utilisateur de votre système pourra les utiliser si elles se trouvent dans leur PATH .

Option 2: installer dans votre répertoire personnel (sans sudo)

Ce qui suit installera des gemmes ~/.gemet y placera des binaires ~/bin(que vous devrez ensuite ajouter à votre PATH).

gem install fakes3 --user-install -n~/bin

Faites-en la valeur par défaut

Dans tous les cas, vous pouvez ajouter ces paramètres à votre ~/.gemrcafin de ne pas avoir à vous en souvenir:

gem: -n/usr/local/bin

c'est à dire echo "gem: -n/usr/local/bin" >> ~/.gemrc

ou

gem: --user-install -n~/bin

c'est à dire echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Astuce: vous pouvez également --no-documentignorer la génération de la documentation des développeurs Ruby.)

nschum
la source
Merci beaucoup! J'ai eu du mal avec les nouvelles versions de brew et ruby ​​mais je n'ai toujours pas pu passer le problème / usr / bin. La spécification du chemin souhaité lors de l'exécution a gem installrésolu le problème.
Daniel Saidi
Le .gemrcdevrait avoir gem: -n /usr/local/bin(besoin d'un espace après -n).
Paul Schreiber
@PaulSchreiber Eh bien, je l'utilise sans espace depuis cinq mois maintenant. :) Êtes-vous sûr?
nschum
2
Plus 1 pour l'option n ° 2, qui est une alternative viable et sûre si vous ne voulez que ces binaires sans Ruby séparé. Nos répertoires personnels sont l'endroit idéal pour les gemmes ajoutées, et une modification rapide de PATH les rend accessibles. Je ne peux pas recommander l'option n ° 1 parce que quelqu'un finira par écraser un joyau et briser son système Ruby ou le code intégré d'Apple qui l'utilise, puis il posera encore une autre question sur SO pour savoir comment le réparer.
the Tin Man
1
C'est une excellente réponse, mais peut-être dépassée. Sur Sierra, l'option dont j'avais besoin était --install-dir / usr / local / bin
Ryan Ballantyne
107

Dans mon cas, j'ai dû réinstaller Ruby en utilisant Brew . Cela semble avoir résolu le problème car je peux à nouveau installer des gemmes.

brew install ruby

Après cela, vous devez vous déconnecter et vous reconnecter, soit graphiquement, soit en redémarrant simplement votre terminal.

Francisco Gonzalez Rull
la source
A bien fonctionné pour moi! Je suppose que cela élimine toute bizarrerie dans l'installation de ruby ​​fournie ... IMO, c'est la meilleure solution.
n13
Vous pouvez dire quel ruby ​​est exécuté avec `` `` quel -a ruby ​​'' `` Sur ma machine cela donne: `` $ quel -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` Quant à savoir pourquoi / usr / local / bin est deux fois sur PATH - on dirait brew install rubyqu'il le met là, même s'il est déjà là. Vraisemblablement, le ruby ​​dans / usr / local est configuré pour installer ses gemmes dans un emplacement qui n'a pas besoin d'un accès root (ce qui est parfaitement logique en fait).
WallStProg
7
PS Vous devez vous déconnecter et vous reconnecter (via le terminal) ou le gem installéchouera toujours.
WallStProg
A bien fonctionné pour moi. J'ai combiné la réponse acceptée avec celle-ci. Merci à tous les deux
youssman
1
Vous n'avez pas à vous déconnecter et à vous reconnecter. Exécutez simplement rehashpour vous assurer que votre shell se rend compte qu'il y a un nouveau rubyplus tôt sur le $PATH. Même cela ne sera pas nécessaire dans le cas où vous n'aviez pas rubyencore exécuté la session shell.
Radon Rosborough
38

C'est à cause de la nouvelle fonction de sécurité d'OS X "El Capitan". Essayez d'ajouter --user-installau lieu d'utiliser sudo:

$ gem install *** --user-install

Par exemple, si vous souhaitez installer fake3, utilisez simplement:

$ gem install fake3 --user-install
Shao Wenbin
la source
Oui! Merci beaucoup!
Louis Magnotti
Après avoir passé 30 minutes avec l'approche de brassage, la fermeture du terminal, etc., cette solution a finalement fonctionné sur 10.10.5 mais ne sait toujours pas pourquoi l'approche de brassage n'a pas fonctionné. Précisez s'il vous plaît. quel ruby ​​post brew install / usr / bin / ruby
vikramvi
1
Wow maintenant le problème est de retour gem install redcarpet -v '3.3.4' --user-install erreur de lancement AVERTISSEMENT: Vous n'avez pas /Users/user_name/.gem/ruby/2.0.0/bin dans votre PATH, gem les exécutables ne fonctionneront pas. Auparavant, je n'obtenais pas cette erreur
vikramvi
1
stackoverflow.com/questions/19579392/… , cela m'a aidé à résoudre le problème enfin
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Essaye ça. Cela fonctionnera certainement.

Femina Brahmbhatt
la source
2
définitivement pas.
Maarten Hartman
19

Vous devez mettre à jour Xcode vers le plus récent (v7.0.1) et tout fonctionnera normalement.

Si après avoir installé le dernier Xcode et ne fonctionne toujours pas, essayez d'installer gem de cette manière:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

Par exemple:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy
astrasleepz
la source
10

Il semble que lors de la mise à niveau vers OS X El Capitain, le répertoire / usr / local est modifié de plusieurs manières:

  1. les autorisations des utilisateurs sont réinitialisées (c'est également un problème pour les personnes utilisant Homebrew)
  2. les binaires et les liens symboliques peuvent avoir été supprimés ou modifiés

[Edit] Il y a aussi une chose préliminaire à faire: mettre à jour Xcode ...

Solution pour # 1:

$ sudo chown -R $(whoami):admin /usr/local

Cela fixe les autorisations sur le /usr/localrépertoire qui sera ensuite aider à la fois gem installet les brew install|link|...commandes fonctionnent correctement.

Solution au n ° 2:

Problèmes basés sur Ruby

Assurez-vous que vous avez fixé les autorisations du /usr/localrépertoire (voir # 1 ci-dessus)

Essayez d'abord de réinstaller votre gem en utilisant:

sudo gem install <gemname>

Notez qu'il installera la dernière version du gem spécifié.

Si vous ne voulez pas faire face à des problèmes de compatibilité descendante, je vous suggère de déterminer d'abord la version de la gemme que vous souhaitez obtenir, puis de la réinstaller avec le -v version. Voir un exemple ci-dessous pour vous assurer que le système n'obtiendra pas une nouvelle version de capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Problèmes liés à la bière

Mettez à jour l'infusion et améliorez vos formules

$ brew update
$ brew upgrade

Vous devrez peut-être également relier certains d'entre eux manuellement

$ brew link <formula>
foobar
la source
3

Comme on l'a dit, le problème vient d'une fonction de sécurité de Mac OSX depuis "El Capitan".

En utilisant le système par défaut Ruby, le processus d'installation se déroule dans le /Library/Ruby/Gems/2.0.0répertoire qui n'est pas disponible pour l'utilisateur et donne l'erreur.

Vous pouvez consulter les paramètres de vos environnements Ruby avec la commande

$ gem env

Il existe un RÉPERTOIRE D'INSTALLATION et un RÉPERTOIRE D'INSTALLATION UTILISATEUR. Pour utiliser le répertoire d'installation de l'utilisateur au lieu du répertoire d'installation par défaut, vous pouvez utiliser le --user-installparamètre à la place, sudoce qui n'est jamais une manière recommandée de faire.

$ gem install myGemName --user-install

Il ne devrait plus y avoir de problème de droits dans le processus. Les gemmes sont ensuite installées dans le répertoire utilisateur:~/.gem/Ruby/2.0.0/bin

Mais pour rendre les gemmes installées disponibles, ce répertoire doit être disponible dans votre chemin. Selon la FAQ de Ruby , vous pouvez ajouter la ligne suivante à votre ~/.bash_profileou~/.bashrc

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

Puis fermez et rechargez votre terminal ou rechargez votre .bash_profileou .bashrc( . ~/.bash_profile)

emchateau
la source
2

Voici la solution que j'ai utilisée:

Remarque: ce correctif est pour la boussole comme je l'ai écrit sur une autre question SO, mais j'ai utilisé le même processus pour restaurer les fonctionnalités de tous les processus terminaux, évidemment les gemmes que vous installez sont différentes, mais le processus est le même.

J'ai eu le même problème. Cela est dû à la mise en œuvre par Apple de la protection de l'intégrité du système (SIP). Vous devez d'abord désactiver cela ...

Redémarrez en mode de récupération:

Redémarrez et maintenez Commande + R jusqu'à ce que vous voyiez le logo Apple.

Une fois démarré, sélectionnez Utilitaires> Terminal dans la barre supérieure.

type: csrutil disable

puis tapez: reboot

Une fois redémarré

Ouvrez le terminal de sauvegarde et entrez les commandes:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Les gemmes individuelles qui ont échoué doivent être corrigées, alors pour chacune, procédez comme suit:

Sur ma machine, c'était la première dépendance qui ne fonctionnait pas, je l'ai donc répertoriée :

sudo gem pristine ffi --version 1.9.3

Parcourez la liste des gemmes qui doivent être réparées. En tout, vous attendez environ 10 minutes pour le réparer, mais vous aurez des commandes de terminal pour le fonctionnement de la boussole.

Capture d'écran

Jbalesteri
la source
2

Si le gem que vous essayez d'installer nécessite des bibliothèques xml, essayez ceci:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Plus précisément, j'ai rencontré un problème lors de l'installation du nokogiri gem v 1.6.8 sur OS X El Capitan

et cela a finalement fonctionné pour moi:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Pour vous assurer que libxml2 et libxslt sont installés, vous pouvez faire:

brew install libxml2 libxslt
brew install libiconv

puis vérifiez que les outils de ligne de commande xcode sont installés:

xcode-select --install 

devrait renvoyer cette erreur:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Anirban Nandi 'Joy'
la source
1

La réinstallation de RVM a fonctionné pour moi, mais j'ai dû réinstaller toutes mes gemmes par la suite:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
Kkelleey
la source
0

J'ai rencontré le même problème après l'installation d'El Capitan, j'ai essayé d'installer sass et compass dans un projet symfony, la commande suivante a renvoyé l'erreur suivante:

$ sudo gem installer la boussole

ERREUR: Erreur lors de l'installation de la boussole: ERREUR: Échec de la création de l'extension native gem.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

vérification de ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': Le compilateur n'a pas réussi à générer un fichier exécutable. (Erreur d'exécution)

J'ai donc essayé d'installer sass avec: $ sudo gem install sass

Vous avez le même message d'erreur, après quelques recherches sur Google, j'ai réussi à installer sass à l'aide de la commande suivante:

$ sudo gem install -n / usr / local / bin sass

Ce qui précède a fonctionné pour moi avec l'installation de sass mais n'a pas fonctionné pour l'installation de la boussole. J'ai lu que quelqu'un quelque part avait ouvert une instance de xcode puis l'avait refermée, puis avait exécuté avec succès la même commande, après quoi cela fonctionnait pour eux. J'ai tenté d'ouvrir xcode mais j'ai été invité par un message disant que la version de xcode installée n'était pas compatible avec El Capitan. J'ai donc mis à jour xcode à partir de l'App Store, relancé la commande suivante qui cette fois s'est exécutée avec succès:

$ sudo gem install -n / usr / local / bin compass

J'ai ensuite pu lancer $ compass init

J'ai maintenant tous mes joyaux en marche et je peux continuer à construire de jolis trucs sass :)

Barry Poore
la source
0

Je devais rm -rf ./vendoralors courir à bundle installnouveau.

VoA
la source
0

Vous pourriez avoir deux options:

  1. Si vous avez installé ruby ​​and rails, vous pouvez d'abord essayer d'exécuter la commande:
    rvm fix-permissions 
    
  2. Vous pouvez désinstaller complètement ruby ​​et réinstaller dans votre ~répertoire aka votre répertoire personnel.

Si vous utilisez homebrew, la commande est:

brew uninstall ruby

Pour la désinstallation des rails sans homebrew, la commande est:

rvm remove

Cela devrait réinstaller le dernier ruby ​​en exécutant la commande:

curl -L https://get.rvm.io | bash -s stable --rails<br>

Mac a 2.6.3 installé en usine, et c'est nécessaire ... sinon exécutez cette commande:

rvm install "ruby-2.6.3"

puis:

gem install rails

Vous obtiendrez quelques messages d'erreur à la fin indiquant que vous devez ajouter d'autres ensembles ...
Assurez-vous simplement que vous êtes dans le ~répertoire de base lors de l'installation afin que les autorisations ne soient pas un problème, mais juste dans Cas...

J'ai de nouveau couru:

rvm fix-permissions

et:

rvm debug

ce qui m'a dit que je devais télécharger du fil, je n'ai pas enregistré la sortie pour cela. En gros, j'ai fait tout ce que l'invite m'a dit de faire si cela avait à voir avec mon système d'exploitation.

-RÉ

Démétriosss
la source
-1

Je n'aime pas installer des trucs avec sudo. une fois que vous avez commencé avec sudo, vous ne pouvez plus vous arrêter.

essayez d'accorder des autorisations au répertoire Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
la source
2
Ne changez pas la propriété des gemmes Ruby système. Cela peut poser des problèmes lorsque Mac OS tente de mettre à jour quoi que ce soit.
the Tin Man
-1
sudo chown -R $(whoami):admin /usr/local

Cela rendra les autorisations (Homebrew y installe ruby)

Miroir318
la source
2
Si vous exécutez cette commande et que cela perturbe les autorisations de vos données MySQL, vous devrez rétablir les autorisations. Voici comment. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux