Edelsteine ​​können unter OS X "El Capitan" nicht installiert werden.

182

Ich kann fakes3gem auf El Capitan Beta 5 nicht installieren und ausführen .

Ich habe es versucht:

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

Dann habe ich versucht, es nach Cocoapods-Art zu machen. Es funktionierte für Cocoapods, aber nicht für Fakes3.

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
quelle
3
Nicht verwenden sudo, um Ruby zu installieren oder Edelsteine ​​zu wechseln. Verwenden Sie stattdessen rbenv oder RVM , um Ruby zu installieren und zu verwalten. Lesen und befolgen Sie die Anweisungen auf den jeweiligen Websites. Verwenden sudoSie in beiden Fällen nach der Installation nur, wenn Sie wissen , was sich ändert und warum Sie dies tun möchten.
der Blechmann

Antworten:

333

Haftungsausschluss: @theTinMan und andere Ruby-Entwickler weisen häufig darauf hin, dass sie sudobei der Installation von Edelsteinen nicht verwendet werden sollen , und verweisen auf Dinge wie RVM . Das ist absolut richtig, wenn Sie Ruby entwickeln. Gehen Sie voran und nutzen Sie das.

Allerdings wollen viele von uns nur einige binäre, die als Juwel verteilt werden geschieht (zB fakes3, cocoapods, xcpretty...). Ich möchte mich definitiv nicht darum kümmern, einen separaten Rubin zu verwalten. Hier sind Ihre schnelleren Optionen:

Option 1: Verwenden Sie weiterhin sudo

Die Verwendung sudoist wahrscheinlich in Ordnung, wenn diese Tools global installiert werden sollen.

Das Problem ist , dass diese Binärdateien in installiert sind /usr/bin, das ist tabu , da El Capitan. Sie können sie jedoch /usr/local/binstattdessen installieren . Dort installiert Homebrew seine Sachen, also existiert sie wahrscheinlich bereits.

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

Gems werden installiert /usr/local/binund jeder Benutzer auf Ihrem System kann sie verwenden, wenn sie sich in seinem Pfad befinden .

Option 2: In Ihrem Home-Verzeichnis installieren (ohne sudo)

Im Folgenden werden Edelsteine ​​installiert ~/.gemund Binärdateien eingefügt ~/bin(die Sie dann zu Ihrer hinzufügen sollten PATH).

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

Machen Sie es zum Standard

In beiden Fällen können Sie diese Parameter zu Ihrem hinzufügen, ~/.gemrcdamit Sie sich nicht an sie erinnern müssen:

gem: -n/usr/local/bin

dh echo "gem: -n/usr/local/bin" >> ~/.gemrc

oder

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

dh echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Tipp: Sie können auch --no-documentdie Erstellung der Ruby-Entwicklerdokumentation überspringen.)

nschum
quelle
Ich danke dir sehr! Ich habe mit neuen Versionen von Brew und Ruby zu kämpfen, konnte aber das Problem / usr / bin immer noch nicht lösen. Die Angabe des gewünschten Pfads beim Ausführen gem installlöste das Problem.
Daniel Saidi
Das .gemrcsollte haben gem: -n /usr/local/bin(brauche ein Leerzeichen nach -n).
Paul Schreiber
@PaulSchreiber Nun, ich benutze es jetzt seit fünf Monaten ohne Leerzeichen. :) Bist du sicher?
Nschum
2
Plus 1 für Option 2, eine praktikable und sichere Alternative, wenn Sie nur diese Binärdateien ohne separaten Ruby verwenden möchten. Unsere Home-Verzeichnisse sind der perfekte Ort für die hinzugefügten Edelsteine, und eine schnelle Änderung von PATH macht sie zugänglich. Ich kann Option 1 nicht empfehlen, da jemand am Ende ein Juwel überschreibt und sein System Ruby oder Apples integrierten Code, der es verwendet, kaputt macht, und dann noch eine Frage zu SO stellt, wie es behoben werden kann.
der Blechmann
1
Dies ist eine ausgezeichnete Antwort, aber möglicherweise veraltet. Auf Sierra war die Option, die ich brauchte --install-dir / usr / local / bin
Ryan Ballantyne
107

In meinem Fall musste ich Ruby mit Brew neu installieren . Das scheint das Problem gelöst zu haben, da ich Edelsteine ​​wieder installieren kann.

brew install ruby

Danach müssen Sie sich entweder grafisch abmelden und wieder anmelden oder einfach Ihr Terminal neu starten.

Francisco Gonzalez Rull
quelle
Hat bei mir gut funktioniert! Ich nehme an, es beseitigt jede Verrücktheit in der mitgelieferten Ruby-Installation ... IMO, dies ist die beste Lösung.
n13
Sie können erkennen, welcher Ruby mit `` `which -a ruby` `` ausgeführt wird. Auf meinem Computer wird Folgendes angezeigt: `` `$ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `Warum / usr / local / bin zweimal auf PATH ist - sieht brew install rubyso aus, als würde es dort abgelegt, auch wenn es bereits da ist. Vermutlich ist der Ruby in / usr / local so konfiguriert, dass er seine Edelsteine ​​an einem Ort installiert, an dem kein Root-Zugriff erforderlich ist (was eigentlich durchaus Sinn macht).
WallStProg
7
PS Sie müssen sich abmelden und wieder anmelden (über das Terminal), sonst schlägt das gem installimmer noch fehl.
WallStProg
Hat gut für mich funktioniert. Ich habe die akzeptierte Antwort mit dieser kombiniert. Vielen Dank an beide
Youssman
1
Sie müssen sich nicht abmelden und erneut anmelden. Führen Sie einfach aus rehash, um sicherzustellen, dass Ihre Shell erkennt, dass es rubyfrüher eine neue gibt $PATH. Auch dies ist nicht erforderlich, wenn Sie rubyin der Shell-Sitzung noch nicht ausgeführt wurden .
Radon Rosborough
38

Das liegt an der neuen Sicherheitsfunktion von OS X "El Capitan". Versuchen Sie hinzuzufügen, --user-installanstatt sudo zu verwenden:

$ gem install *** --user-install

Wenn Sie beispielsweise fake3 installieren möchten, verwenden Sie einfach:

$ gem install fake3 --user-install
Shao Wenbin
quelle
Ja! Ich danke dir sehr!
Louis Magnotti
Nachdem diese Lösung 30 Minuten mit dem Brauansatz, dem Schließen des Terminals usw. verbracht hatte, funktionierte sie am 10.10.5. Sie ist sich jedoch immer noch nicht sicher, warum der Brühansatz nicht funktioniert hat. Bitte klären Sie. welche Ruby Post Brew installieren / usr / bin / Ruby
Vikramvi
1
Wow, jetzt ist das Problem wieder. Gem install redcarpet -v '3.3.4' --user-install wirft einen Fehler. WARNUNG: Sie haben /Users/user_name/.gem/ruby/2.0.0/bin nicht in Ihrem PATH, gem ausführbare Dateien werden nicht ausgeführt. Früher habe ich diesen Fehler nicht bekommen
Vikramvi
1
stackoverflow.com/questions/19579392/… , dies half mir, das Problem endlich zu lösen
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Versuche dies. Es wird auf jeden Fall funktionieren.

Femina Brahmbhatt
quelle
2
definitiv nicht.
Maarten Hartman
19

Sie müssen Xcode auf den neuesten (v7.0.1) aktualisieren und alles funktioniert wie gewohnt.

Wenn Sie nach der Installation des neuesten Xcodes immer noch nicht funktionieren, versuchen Sie, gem auf folgende Weise zu installieren:

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

Beispielsweise:

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
quelle
10

Beim Upgrade auf OS X El Capitain wird das Verzeichnis / usr / local auf verschiedene Arten geändert:

  1. Benutzerberechtigungen werden zurückgesetzt (dies ist auch ein Problem für Benutzer von Homebrew).
  2. Binärdateien und Symlinks wurden möglicherweise gelöscht oder geändert

[Bearbeiten] Es gibt auch eine vorläufige Aufgabe: Xcode aktualisieren ...

Lösung für # 1:

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

Dies wird fix Berechtigungen für das /usr/localVerzeichnis , das dann beide helfen gem installund brew install|link|...Befehle richtig funktioniert.

Lösung zu # 2:

Ruby-basierte Probleme

Stellen Sie sicher, dass Sie die Berechtigungen des festgelegt haben /usr/local Verzeichnisses festgelegt haben (siehe Nr. 1 oben).

Versuchen Sie zunächst, Ihren Edelstein neu zu installieren, indem Sie:

sudo gem install <gemname>

Beachten Sie, dass die neueste Version des angegebenen Edelsteins installiert wird.

Wenn Sie keine Probleme mit der Abwärtskompatibilität haben möchten, empfehlen wir Ihnen, zunächst zu bestimmen, welche Version des Edelsteins Sie erhalten möchten, und diese dann mit dem neu zu installieren -v version. Sehen Sie sich unten ein Beispiel an, um sicherzustellen, dass das System keine neue Version von Capistrano erhält.

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

Braubasierte Themen

Aktualisieren Sie Brew und aktualisieren Sie Ihre Formeln

$ brew update
$ brew upgrade

Möglicherweise müssen Sie einige von ihnen auch manuell neu verknüpfen

$ brew link <formula>
foobar
quelle
3

Wie bereits erwähnt, stammt das Problem aus einer Sicherheitsfunktion von Mac OSX seit "El Capitan".

Bei Verwendung des Standardsystems Ruby erfolgt der Installationsvorgang in dem /Library/Ruby/Gems/2.0.0Verzeichnis, das dem Benutzer nicht zur Verfügung steht, und gibt den Fehler aus.

Mit dem Befehl können Sie einen Blick auf Ihre Ruby-Umgebungsparameter werfen

$ gem env

Es gibt ein INSTALLATIONSVERZEICHNIS und ein BENUTZERINSTALLATIONSVERZEICHNIS. Um das Benutzerinstallationsverzeichnis anstelle des Standardinstallationsverzeichnisses zu verwenden, können Sie --user-installstattdessen Parameter verwenden, sudodie niemals empfohlen werden.

$ gem install myGemName --user-install

Dabei sollte es keine Rechte mehr geben. Die Edelsteine ​​werden dann im Benutzerverzeichnis installiert:~/.gem/Ruby/2.0.0/bin

Um die installierten Edelsteine ​​verfügbar zu machen, sollte dieses Verzeichnis in Ihrem Pfad verfügbar sein. Entsprechend der FAQ von Ruby können Sie Ihrem ~/.bash_profileoder die folgende Zeile hinzufügen~/.bashrc

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

Schließen Sie dann Ihr Terminal und laden Sie es neu oder laden Sie Ihr .bash_profileoder .bashrc( . ~/.bash_profile) neu

Emchateau
quelle
2

Dies ist die Lösung, die ich verwendet habe:

Hinweis: Dieser Fix ist für Kompass, wie ich ihn für eine andere SO-Frage geschrieben habe, aber ich habe denselben Prozess verwendet, um die Funktionalität aller Terminalprozesse wiederherzustellen. Offensichtlich sind die von Ihnen installierten Edelsteine ​​unterschiedlich, aber der Prozess ist der gleiche.

Ich hatte das gleiche Problem. Dies ist darauf zurückzuführen, dass Apple den System Integrity Protection (SIP) implementiert. Sie müssen das zuerst deaktivieren ...

Neustart im Wiederherstellungsmodus:

Starten Sie neu und halten Sie Befehl + R gedrückt bis das Apple-Logo angezeigt wird.

Wählen Sie nach dem Booten Dienstprogramme> Terminal oberen Leiste .

Art: csrutil disable

Geben Sie dann Folgendes ein: reboot

Einmal neu gestartet

Öffnen Sie das Terminal und geben Sie die folgenden Befehle ein:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Die einzelnen Edelsteine, die versagt haben, müssen repariert werden. Führen Sie daher für jeden Edelstein Folgendes aus:

Auf meinem Computer war dies die erste Abhängigkeit, die nicht funktionierte. Deshalb habe ich sie aufgelistet :

sudo gem pristine ffi --version 1.9.3

Fahren Sie mit der Liste der Edelsteine ​​fort, die repariert werden müssen. Insgesamt brauchen Sie ungefähr 10 Minuten, um das Problem zu beheben, aber Sie haben Terminalbefehle für die Kompassarbeit.

Bildschirmfoto

jbalesteri
quelle
2

Wenn für das zu installierende Juwel XML-Bibliotheken erforderlich sind, versuchen Sie Folgendes:

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

Insbesondere beim Installieren des Nokiaogiri Gem 1.6.8 unter OS X El Capitan ist ein Problem aufgetreten

und das hat bei mir endlich geklappt:

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

Um sicherzustellen, dass libxml2 und libxslt installiert sind, können Sie Folgendes tun:

brew install libxml2 libxslt
brew install libiconv

Überprüfen Sie anschließend, ob die xcode-Befehlszeilentools installiert sind:

xcode-select --install 

sollte diesen Fehler zurückgeben:

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

Die Neuinstallation von RVM funktionierte für mich, aber ich musste danach alle meine Edelsteine ​​neu installieren:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
kkelleey
quelle
0

Nach der Installation von El Capitan ist das gleiche Problem aufgetreten. Ich habe versucht, sass und kompass in ein Symfony-Projekt zu installieren. Der folgende Befehl hat den folgenden Fehler zurückgegeben:

$ sudo gem Kompass installieren

FEHLER: Fehler beim Installieren des Kompasses: FEHLER: Fehler beim Erstellen der nativen Gem-Erweiterung.

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

nach ffi.h suchen ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': Der Compiler konnte keine generieren ausführbare Datei. (Laufzeit Fehler)

Also habe ich dann versucht, sass zu installieren mit: $ sudo gem install sass

Ich habe die gleiche Fehlermeldung erhalten, nach einigem googeln habe ich es geschafft, sass mit dem folgenden Befehl zu installieren:

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

Das obige hat bei der Installation von sass funktioniert, aber nicht bei der Installation von Kompass. Ich habe gelesen, dass irgendwo jemand eine Instanz von xcode geöffnet und dann wieder geschlossen und dann denselben Befehl erfolgreich ausgeführt hat, wonach er für ihn funktioniert hat. Ich habe versucht, xcode zu öffnen, wurde jedoch mit der Meldung aufgefordert, dass die installierte Version von xcode nicht mit El Capitan kompatibel ist. Also habe ich dann xcode aus dem App Store aktualisiert und den folgenden Befehl erneut ausgeführt, der diesmal erfolgreich ausgeführt wurde:

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

Ich konnte dann $ kompass init ausführen

Ich habe jetzt alle meine Edelsteine ​​in Arbeit und kann fortfahren, einige schöne Sass-Sachen zu bauen :)

Barry Poore
quelle
0

Ich musste rm -rf ./vendordann bundle installwieder rennen .

VoA
quelle
-1

Ich mag es nicht, Sachen mit sudo zu installieren. Sobald Sie mit Sudo beginnen, können Sie nicht mehr aufhören.

Versuchen Sie, dem Gems-Verzeichnis Berechtigungen zu erteilen.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
quelle
2
Ändern Sie nicht den Besitz des Systems Ruby Gems. Dies kann zu Problemen führen, wenn Mac OS versucht, etwas zu aktualisieren.
der Blechmann
-1
sudo chown -R $(whoami):admin /usr/local

Das gibt Berechtigungen zurück (Homebrew installiert dort Ruby)

Mirror318
quelle
2
Wenn Sie diesen Befehl ausführen und die Berechtigungen Ihrer MySQL-Daten durcheinander bringen, müssen Sie die Berechtigungen zurücksetzen. Hier ist wie. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux