So installieren Sie ein Gem oder aktualisieren RubyGems, wenn es mit einem Berechtigungsfehler fehlschlägt

559

Ich versuche, ein Gem mithilfe von gem install mygemRubyGems zu installieren oder zu aktualisieren gem update --system, und es schlägt mit diesem Fehler fehl:

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

Hat jemand eine Idee, wie man das löst?

Gaurav
quelle
5
Hier ist meine Lösung: stackoverflow.com/questions/34071868/…
LanceP
2
Mein Fehler ist aufgetreten, weil ich mache: Gem Update Cocoapods richtig: Sudo
Gem
60
sudo chown -R $USER /Library/Ruby/Gems/
Vaskort
2
einfach mit diesem Befehl zu arbeiten hat für mich funktioniert: sudo gem install mygem
Jayprakash Dubey
1
Ich habe die zsh-Shell verwendet und es gab ein Pfadproblem in ~ / .zshrc. Ich habe diese Zeile am Ende der Datei verwendet und es hat bei mir funktioniert: export PATH = "$ HOME / .rbenv / shims: $ PATH"
rosnk

Antworten:

317

Sie haben keine Schreibberechtigungen für das Verzeichnis /Library/Ruby/Gems/1.8.

bedeutet genau das, Sie haben keine Erlaubnis, dort zu schreiben.

Dies ist die von Apple installierte Version von Ruby für den eigenen Gebrauch. Es ist zwar in Ordnung, geringfügige Änderungen daran vorzunehmen, wenn Sie wissen, was Sie tun , da Sie sich über das Berechtigungsproblem nicht sicher sind. Ich würde jedoch sagen, dass es keine gute Idee ist, diesen Weg fortzusetzen.

Stattdessen empfehle ich Ihnen dringend, entweder rbenv oder RVM zu verwenden, um einen separaten Ruby zu verwalten, der in einer Sandbox in Ihrem Home-Verzeichnis installiert ist und den Sie ändern / falten / spindeln / ändern können, ohne sich Gedanken über das System Ruby machen zu müssen.

Zwischen den beiden verwende ich rbenv, obwohl ich in der Vergangenheit viel RVM verwendet habe. rbenv verfolgt bei der Verwaltung Ihrer Ruby-Installation einen "hands-off" -Ansatz. RVM hat viele Funktionen und ist sehr leistungsfähig, aber infolgedessen aufdringlicher. In beiden Fällen LESEN Sie die Installationsdokumentation einige Male, bevor Sie mit der Installation beginnen, je nachdem, was Sie auswählen.

der Blechmann
quelle
176
Sie müssen jedoch keine separate Ruby-Bibliothek verwenden. Stellen Sie einfach 'sudo' vor Ihren, wie Michael oben vorgeschlagen hat.
Serraosays
37
Das Ändern des Besitzes der Apple-Installation von Ruby ist keine gute Idee, da das System installiert / aktualisiert und das Festplatten-Dienstprogramm den Besitz und die Berechtigungen des Verzeichnisses automatisch zurücksetzen / reparieren kann. Dies wird den Benutzer frustrieren und kann das Betriebssystem und den Code frustrieren, die Schreibberechtigungen / Besitz dieser Verzeichnisse erwarten. Apple installiert Apps, die Ruby verwenden und eine bestimmte Version oder ein bestimmtes Verhalten erwarten können, sodass diese beschädigt werden können. Warum sich die Mühe machen, wenn es einfacher und sicherer ist, RVM oder rbenv zu verwenden und sich darüber keine Sorgen zu machen?
der Blechmann
203
Für diejenigen wie mich, die eigentlich keinen Ruby-Entwickler machen und nicht eine halbe Stunde lang herumspielen wollen, um herauszufinden, was all diese Kristall-Dinger sind. brew install rubylöst Ihre Abhängigkeitsprobleme auf eine saubere Art und Weise, die die Apple-Installation nicht beeinträchtigt. Wenn Sie bereits sudoein Update bei der Erstinstallation durchgeführt haben und sich Sorgen darüber machen, was Sie getan haben, sollten Sie es folgendermaßen rückgängig machen können:cd /System/Library/Frameworks/Ruby.framework/Versions;sudo rm Current; sudo ln -s 1.8 Current;
Louis
21
" I did the sudo tangle and wound up modifying my pre-installed Ruby. I did your steps to try to fix the problem, but now when I do irb or ruby -v, I get command not found. What's going on and is there a fix" und dies erhöht nur das Gewicht, warum Menschen nicht verwenden sollten sudooder chown. Seufz ...
der Blechmann
55
Gelöst: auf El Captain, nachdem Sie brew install rubydas Terminal einfach geschlossen und wieder geöffnet haben.
Fmessina
421

Versuchen Sie hinzuzufügen, --user-installanstatt zu verwenden sudo:

gem install mygem --user-install
Nathanwhy
quelle
4
Ich weiß nicht, warum Ihre Antwort vorher nicht veröffentlicht wurde. Die --user-installOption gibt es anscheinend schon eine Weile. Ich wünschte nur, du hättest das früher geschrieben. =)
Michael - Wo ist Clay Shirky
7
Dies muss nach oben gehen! Die Installation mit sudo oder su ist eine schlechte Idee, da Sie ein Berechtigungssystem für die Module erzwingen und möglicherweise die global installierten Pakete mit ansonsten installierten Paketen oder den Abhängigkeiten anderer Projekte kollidieren können. Für die Verwendung von rbenv müssen Sie eine andere Software installieren und die Komplexität erhöhen.
Hubert Grzeskowiak
7
Dies funktioniert, warnt jedoch: 'WARNUNG: Sie haben /Users/<username>/.gem/ruby/2.0.0/bin nicht in Ihrem PATH, gem ausführbare Dateien werden nicht ausgeführt.' Der folgende Link enthält nützliche Anweisungen zum Aktualisieren Ihres Pfads (ohne vi verwenden zu müssen) hathaway.cc/post/69201163472/…
dawid
4
Das ist einfach und logisch. Fügen Sie einen Ruby-Pfad hinzu, wenn Sie ihn nicht in Ihrem Bashrc haben. if which ruby >/dev/null && which gem >/dev/null; then PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" fi <br> Quelle : guides.rubygems.org/faqs/#user-install
Inder Kumar Rathore
1
Kann dies mit Apples (Ruby installiert) System zu tun haben?
Daniel Springer
93

Sie sollten wirklich einen Ruby-Versionsmanager verwenden.

Eine ordnungsgemäße Verwendung würde Ihr Berechtigungsproblem bei der Ausführung eines gem updateBefehls verhindern und beheben .

Ich empfehle rbenv .

Selbst wenn Sie einen Ruby-Versionsmanager verwenden, wird möglicherweise immer noch dieselbe Fehlermeldung angezeigt.

Wenn Sie dies tun und rbenv verwenden, überprüfen Sie einfach, ob sich das ~/.rbenv/shimsVerzeichnis vor dem Pfad für das System Ruby befindet.

$ echo $PATH zeigt Ihnen die Reihenfolge Ihres Ladepfads.

Wenn Sie feststellen, dass Ihr Shims-Verzeichnis hinter dem Ruby-Bin-Verzeichnis Ihres Systems liegt, bearbeiten Sie Ihre ~/.bashrcDatei und geben Sie dies als letzten Export-PATH-Befehl ein: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v zeigt Ihnen, welche Version von Ruby Sie verwenden

Dies zeigt, dass ich derzeit die Systemversion von Ruby verwende (normalerweise nicht gut).

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

$ rbenv global 1.9.3-p448 schaltet mich auf eine neuere, vorinstallierte Version um (siehe Referenzen unten).

Dies zeigt, dass ich eine neuere Version von Ruby verwende (dies wird wahrscheinlich nicht den Gem :: FilePermissionError verursachen).

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

Normalerweise sollten Sie einem Gem-Befehl kein sudo voranstellen müssen. Wenn Sie dies für erforderlich halten, ist wahrscheinlich etwas falsch konfiguriert.

Einzelheiten zu rbenv finden Sie unter:

l3x
quelle
7
Sie sollten nicht mit dem Pass herumspielen müssen, wenn Sie ihn verwenden rbenv. Wenn Sie die Homebrew-Installationsanweisungen befolgen , müssen Sie nur eval "$(rbenv init -)"Ihre Shell-Konfiguration hinzufügen und rbenvsich darum kümmern, Ihren Pass PATHfür Sie einzurichten .
Vielen Dank. Ich hatte das 'rbenv global' vergessen, also benutzte ich immer noch das System Ruby und die Installation von gem schlug fehl.
Graham Perks
75

Warum tust du nicht:

sudo gem update --system
Bobz
quelle
39
Die Installation von Edelsteinen als Root ist keine gute Idee. stackoverflow.com/questions/2119064/…
spuder
Hatte Probleme mit brew upgrade Error: Permission denied.... Dies hat es behoben. Vielen Dank!
Ostap Andrusiv
12
Verwenden Sie niemals SUDO. Wenn Sie dies tun müssen, haben Sie in Ihrem Setup etwas falsch gemacht. Bitte benutzen Sie rbenv oder rvm.
Chris Hough
14
Warum antwortet jeder auf Berechtigungsprobleme, um Sudo immer vor einen Befehl zu werfen? Wie ist diese Best Practice?
Steven
hyh: qzc.xcodeproj ylgwhyh $ gem install cocoapods FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError) Sie haben keine Schreibberechtigungen für das Verzeichnis /Library/Ruby/Gems/2.0.0.
Ylgwhyh
40

Dadurch wird das Problem auf MacOs Mojave und MacOs Catalina auf saubere Weise behoben :

brew install ruby

Setzen Sie dann GEM_HOME auf Ihr Benutzerverzeichnis. Auf dem 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

ODER wenn eingeschaltet 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
Fmessina
quelle
2
Wie haben Sie das herausgefunden? Hat funktioniert!
Kuzdu
2
du bist der Mann! High Five, es funktioniert wirklich wie ein Zauber. Vielen Dank.
MrDinkelman
1
Das hat bei mir nicht funktioniert, bis ich gerannt bin xcode-select --install. Dies ist erforderlich, um Erweiterungen zu kompilieren.
Marc Perrin-Pelletier
Ich habe dies ausgeführt und möchte in der Lage sein, die von diesen vorgenommenen Änderungen zurückzusetzen. Wissen Sie, wie Sie es zurücksetzen können? @ Messina
KarenAnne
Dies sollte funktionieren: Bearbeiten Sie Ihre ~/.bashrcoder ~/.zshrcDatei, entfernen Sie die 3 hinzugefügten Zeilen und führen Sie den source ~/.bashrcBefehl
Fmessina
34

Für mich war das Problem darauf zurückzuführen, dass rbenvdie richtige Version global verwendet und vergessen wurde.

Also musste ich es einstellen rbenv global xxx

In meinem Fall habe ich installiert, 2.0.0-p247sodass ich den folgenden Befehl ausgeben musste:

rbenv global 2.0.0-p247
rbenv rehash

Dann funktionierte alles gut.

Hendrik
quelle
3
Für diejenigen unter Ihnen, die bereits rbenv verwenden und nach der Aktualisierung von OSX auf eine neuere Version einen Berechtigungsfehler beim Installieren von Gems erhalten haben: Sie sollten zunächst die rbenv-Version festlegen rbenv global 2.1.1und anschließend fortfahren rbenv rehash. Führen Sie nun Ihren gem installBefehl erneut aus.
Njappboy
1
^ Dieses + Terminal neu starten.
XåpplI'-I0llwlg'I -
1
zukünftige Entdecker: rbenv rehash ist veraltet github.com/rbenv/rbenv-gem-rehash
TCannadySF
Hat perfekt für mich funktioniert! Es war das, was rbenv rehashich vermisst habe.
Jamesmarkcook
Erwähnenswert ist, dass es sich bei System Ruby um Berechtigungen handelt und rbenv System Ruby verwendet hätte, wenn kein globaler Ruby festgelegt worden wäre. Dies wird überprüft mit rbenv versions.
Dennis
23

Sie müssen Ihre Pfade korrigieren.

Führen Sie Folgendes aus, um festzustellen, ob dieses Update funktioniert:

which gem

Dies sollte ein Verzeichnis ausgeben, für das Sie keine Berechtigungen haben:

/usr/bin/gem

Führen Sie die folgenden Schritte aus, um dies zu beheben:

  1. Bestimmen Sie den Pfad, den Sie in Ihr Profil kopieren müssen:

    rbenv init -

    Die erste Zeile der Ausgabe ist die Zeile, die Sie in Ihr Profil kopieren müssen:

    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
    }
  2. Kopieren Sie den Pfad in Ihr Profil und speichern Sie ihn.

  3. Lade dein Profil neu ( source ~/.zshenvfür mich).

  4. Ausführen rbenv rehash.

Wenn Sie jetzt ausführen which gem, sollten Sie einen lokalen Pfad erhalten, für den Sie Berechtigungen haben:

/Users/justin/.rbenv/shims/gem
Justin Leveck
quelle
Das war das Problem in meiner Situation. Sie sollten enthalten sein können eval "$(rbenv init -)"in Ihren ~/.bash_profilenotwendigen Änderungen alle zu machen.
Nyi
beste Antwort. Mein Profil wurde .bash_profile genannt und Sie können die Datei folgendermaßen öffnen: touch ~ / .bash_profile; Öffnen Sie ~ / .bash_profile und fügen Sie die Zeile hinzu, die Sie unter Punkt 1 erwähnt haben.
CarmenA
17
sudo gem update --system
sudo gem install (gemfile)
Eliot Arntz
quelle
In macOS hat Mojave sudokeine Berechtigung. haha
DawnSong
17

Das hat bei mir funktioniert. Wenn Sie Edelsteine ​​zuvor als Root installiert haben, wird dieses Problem behoben, indem der Eigentümer wieder an Sie übergeben wird (was die Sicherheit betrifft).

sudo chown -R `whoami` /Library/Ruby/Gems
thebiggestlebowski
quelle
1
Großes Nein! Ändern Sie niemals die Berechtigung für den /LibraryOrdner. Das System kann zukünftige Updates beschädigen. (Entschuldigung für die späte Antwort)
Raptor
@Raptor Ich ändere die Berechtigungen für einen Unterordner, nicht für "/ Library". In meinem Fall habe ich die Edelsteine ​​fälschlicherweise als Wurzel installiert, deshalb wollte ich das rückgängig machen. Es gibt keine negativen Konsequenzen, an die ich theoretisch denken kann, und es gab auch keine, die ich beobachtet habe. Ich bin neugierig - warum denkst du, ist das eine schlechte Idee?
Thebiggestlebowski
Der Pfad ist für das System. Weitere Updates von macOS können fehlschlagen.
Raptor
Der Edelstein wird standardmäßig an diesem Speicherort installiert. Es war unbrauchbar, weil es fälschlicherweise als root (sudo) anstelle meines normalen Benutzers installiert wurde. Das Ergebnis meiner Arbeit war das gleiche, als hätte ich sie zuerst als $ USER installiert. Ich sehe den Schaden nicht. Die meisten anderen Antworten hier schlagen dasselbe Ergebnis / dieselbe Lösung vor, aber unterschiedliche Wege, um dies zu erreichen. Ich sehe das Problem immer noch nicht. Wollen Sie damit sagen, dass Edelsteine ​​nicht unter / Library installiert werden sollten?
Thebiggestlebowski
15

Es gibt zwei Routen: Verwenden Sie entweder rbenv oder RVM. Es gibt Rezepte für beide unten. Bevor Sie dies tun, möchten Sie wahrscheinlich die Installation lokaler Dokumente für Edelsteine ​​deaktivieren.

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

Dann:

install rbenv

install ruby-build

Lauf:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

Dadurch wird eine aktuelle Version des Gem-Systems in Ihren lokalen Verzeichnissen installiert. Das heißt, Sie stören die Systemkonfiguration nicht. Wenn Sie diese Frage stellen, sollten Sie sich nicht mit der Systemsicherheit herumschlagen und länger damit verbringen, zu verstehen, auf welche Probleme Sie möglicherweise stoßen, als nur eine einfache Möglichkeit zu haben, das Problem zu vermeiden, mit dem Sie begonnen haben. Erfahren Sie später InfoSec, wenn Sie mehr über das Betriebssystem und die Programmierung wissen.

Für eine Alternative verwenden Sie stattdessen 'RVM': So installieren Sie rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Dies hat das gleiche Ergebnis. Sie erhalten ein lokales Ruby and Gem-System, das die Systemversionen nicht beeinträchtigt. Es besteht keine Notwendigkeit für Homebrew oder übergeordnete Systembibliotheken usw.

JezC
quelle
13

Ich habe diese Anleitung für sudoweniger Juwel gefunden :

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. Exporte hinzufügen zu .bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
  4. Und zum Schluss fügen Sie Folgendes hinzu ~/.gemrc:

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

Gopek
quelle
Ich habe verwendet brew install rebenv ruby-build, dann gibt es ein systemnach meinem Verzeichnis? Irgendeine Idee, was das verursacht hat und wie man das loswird system?
7537247
13

Versuchen Sie die Antwort von Nathanwhy, bevor Sie meine ursprüngliche Antwort unten verwenden. Seine Empfehlung von --user-installsollte den gleichen Zweck erfüllen, ohne sich mit Ihrer .bash_profileoder Ihrer Rubinversion herumschlagen zu müssen.


Wenn Sie sich keine Gedanken über eine bestimmte Ruby-Version machen, können Sie die Optionen des Ruby-Umgebungsmanagers für Schwerlasten überspringen und diese Zeilen einfach hinzufügen zu ~/.bash_profile:

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"

Der Pfad wird aus der ursprünglichen Ausgabe von gestohlen 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
  ...

Es sudoist kein Ing erforderlich, und Sie können den bereits installierten Ruby mit freundlicher Genehmigung von Apple verwenden.

Michael - Wo ist Clay Shirky?
quelle
3
+1: Das hat bei mir super funktioniert. Nicht jeder ist der Systemadministrator des von ihm verwendeten Computers, und daher hat nicht jeder Zugriff auf "sudo", "chown" oder ähnliche Tools. In ähnlicher Weise sollten sich Benutzer der "gem install --user-install" bewusst sein, die den gem in einem Verzeichnis im Home-Verzeichnis des Benutzers installiert und nicht in einem Verzeichnis, das von allen Benutzern gemeinsam genutzt wird.
Einige Guy
12

Ich musste eine machen, rbenv rehashdamit sie auf meine lokale Gem-Bibliothek verweist.

Es sieht so aus, als ob Ihr Edelsteinmanager auf die Systembibliothek verweist. Führen Sie also, anstatt mit Berechtigungen herumzuspielen, das Äquivalent von "Aufwärmen" für Ihren Manager aus, damit die Dinge lokal zeigen.

Bobbdelsol
quelle
3
zukünftige Entdecker: rbenv rehash ist veraltet github.com/rbenv/rbenv-gem-rehash
TCannadySF
12

Älter und weiser

Tu nicht, was ich hier sage, sondern sei immer vorsichtig, wenn du es benutzt sudo. Sie möchten wahrscheinlich so etwas wie rbenvisolieren, was auch immer Sie tun.


Weg

lernen chown

Ich weiß nicht, ob Ihnen die Befehlszeile gefällt, aber dies macht die Arbeit an jedem Projekt mit einem Tool, das Pakete auf Ihrem System installiert, zum Kinderspiel.

chown steht, soweit ich das beurteilen kann, für Change Ownership.

Der Grund, warum ich nach dieser Antwort gesucht habe, ist, dass gem installich heute diesen Fehler erhalten habe:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

Dies ist eine perfekte Gelegenheit zu nutzen chown. Sie sehen, Ruby hat uns das Verzeichnis gegeben, auf das es Zugriff benötigt, und es scheint ein Verzeichnis zu sein, das es ziemlich oft verwenden wird.

In diesem Fall gibt es nur drei Dinge, die man wissen muss, um das Problem zu lösen, aber sie chownsind viel leistungsfähiger und bieten Ihnen viel mehr Flexibilität, als ich jetzt demonstrieren werde. Weitere Informationen finden Sie in der Quelle unten.

Die zwei Dinge

  1. Nutzername
  2. Verzeichnis

Wenn Sie sich in einer Shell befinden, ist es einfach, den Benutzernamen zu finden. Schauen Sie sich einfach die Eingabeaufforderung an. Meins sieht aus wie:

breadly@breadly-desktop:~\Desktop

Der aktuelle Benutzer ist nur der Name vor dem @. Wir kennen das Verzeichnis aus den Fehlermeldungen, aber Sie haben zwei Möglichkeiten. Sie können Ihre Berechtigung entweder mithilfe von auf die aktuelle Version beschränken ../gems/1.9.1oder sich mithilfe von Schreibberechtigung für Edelsteine ​​aller Versionen erteilen ../gems.

Der Befehl, den Besitzer tatsächlich zu wechseln, würde so aussehen.

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

Das -Rist als Flag bekannt, und das -RFlag weist einen Befehl normalerweise an, etwas rekursiv zu tun, oder mit anderen Worten, den Befehl für alles auszuführen, was im Verzeichnis enthalten ist, und für alle Dinge, die in den darin enthaltenen Verzeichnissen enthalten sind, und so weiter bis es gibt nichts anderes.

Rassig
quelle
Wenn Sie herausfinden möchten, zu welcher Gruppe Ihr Benutzer gehört, können Sie sich auch darauf beziehen. stackoverflow.com/questions/350141/…
Breedly
3
Sie sollten jedoch vorsichtig sein, wenn Sie die Eigentümer ändern, wenn diese im Verzeichnis / usr / local / bin installiert werden müssen.
Breedly
16
Es ist eine schlechte Idee, unter anderem den Besitz von Gegenständen in den Pfaden / usr, / Library oder / var zu ändern. Das System kann angehalten werden, da auf Dateien und Treiber nicht mehr zugegriffen werden kann. Zukünftige Updates können unterbrochen werden, wenn das Installationsprogramm feststellt, dass die Pfade nicht mehr Eigentum von root: rad sind. Das Beheben des Schadens kann sehr schwierig sein und wird normalerweise am besten durch Neuinstallation des Betriebssystems erreicht. Naive / unerfahrene Benutzer wissen nicht genug über das Betriebssystem, um zu verstehen, welche Dateien / Verzeichnisse möglicherweise sicher sein könnten, und sollten gewarnt werden, dies nicht zu Hause zu versuchen.
der Blechmann
Lol das ist eine peinliche Antwort. :) Älter und weiser jetzt denke ich.
Breedly
11

Ich hatte meinen Mac formatiert und viele Lösungsvorschläge funktionierten bei mir nicht. Was für mich funktioniert hat, sind diese Befehle in der richtigen Reihenfolge:

  1. Installieren Sie Homebrew:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Installieren Sie Ruby:

    brew install ruby
  3. Kompass installieren:

    sudo gem install compass
Herbi Shtini
quelle
Sie sollten niemals sudoetwas mit Edelstein installieren müssen. Mit wird sudoes in den Ruby installiert, der dem System gehört, nicht in einen, den Sie besitzen. Die Verwendung eines Ruby mit Sandbox ist beim Programmieren viel einfacher zu verwalten und zu verwenden, da Sie mehrere unterschiedliche Instanzen erstellen und verschiedene Dinge ausprobieren können, um sie dann zu zerstören, wenn Sie fertig sind.
der Blechmann
9

sudo chown -R $USER /Library/Ruby/Gems/

vaskort
quelle
6

Arbeite für mich:

sudo gem uninstall cocoapods

sudo gem install cocoapods
Evya
quelle
Erstaunlich Arbeitete für mich aswel! Vielen Dank. Ersparnis bei der Installation von rbenv oder RVM
NaXir
5
Downvoting, da, wie in anderen Kommentaren erwähnt, die Installation von Edelsteinen als Root eine gefährliche Praxis ist. Das Installationsprogramm kann buchstäblich alles mit Ihrem System tun.
Einige Guy
@SomeGuy: "Das Installationsprogramm kann buchstäblich alles tun" ... es ist wahrscheinlicher, dass der Benutzer selbst den Befehl fetten und das System entstellen kann. Ich kann mir keine Zeit vorstellen, in der ein Installateur mein System durcheinander gebracht hat, aber ich kann mich genau an die Zeiten erinnern, in denen ich es getan habe. sudoist ein Befehl, den Neulinge lieben, weil er es ermöglicht, so leicht das Falsche zu tun, und es dauert Jahre, um zu lernen, angemessen paranoid zu sein, wenn er es benutzt.
der Blechmann
1
Die beste Antwort !!!! Nachdem Sie diese 2 Befehle ausgeführt haben, starten Sie bitte das Terminal neu und das ist alles !!! Vielen Dank!!!
Nosequeweaponer
4

Überprüfen Sie, ob Ihre Ruby-Version richtig ist. Wenn nicht, ändern Sie es.

Das funktioniert bei mir:

$ rbenv global 1.9.3-p547
$ gem update --system
Zen
quelle
Dies ist die bessere Lösung: update> chown. Vielen Dank! . Ich musste auch rennenbrew install ruby
Jose Llausas
4

Installieren Sie rbenv von brew install rbenv;

eval "$(rbenv init -)"Setzen Sie dann am Ende von ~ / .bash_profile (oder ~ / .zshrc von MacOS);

Öffnen Sie ein neues Terminal und starten Sie gem install ***wird funktionieren!

zhao
quelle
Hat bei mir nicht funktioniert ❯ brew install rbenv -q Warning: rbenv 1.1.1 is already installed and up-to-date To reinstall 1.1.1, run `brew reinstall rbenv` ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ eval "$(rbenv init -)" ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ gem update Updating installed gems Updating CFPropertyList ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
Max Coplan
2

Wie von Bobbdelsol hervorgehoben, hat Rehash für mich funktioniert:

==> 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...
Arunabh Das
quelle
sooo nah. noch "FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError) Sie haben keine Schreibberechtigungen für das Verzeichnis /Library/Ruby/Gems/2.0.0."
JGallardo
1

Getestet auf MacOS Mojave MIT ERFOLG:

  1. Deinstallieren Sie alle Ihre alten Ruby-Versionen (nehmen wir an, Sie haben 2.00 und 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. Installieren Sie die brandneue Ruby-Version:

    $ brew install ruby

  3. Legen Sie einen Standardalias für Ihre Version fest:

    $ rvm alias create default ruby

  4. Starten Sie Ihr System neu, da dies die sicherste Methode ist, mit der Ihr Computer die kürzlich installierte neue Ruby-Version lädt.

Nachdem Sie die oben beschriebene Prozedur ausgeführt haben, können Sie jeden gemBefehl erfolgreich ausführen .

Marcelo Gumiero
quelle
-2

cd /Library/Ruby/Gems/2.0.0

offen.

Rechtsklick Informationen abrufen

Click-Verschluss

Passwort platzieren

alles lesen und schreiben lassen.

myklgee
quelle
1
Bitte nehmen Sie sich die Zeit, um Ihre Antwort zur besseren Lesbarkeit zu formatieren. Der Aufwand für Recherche und Erklärung zahlt sich aus.
der Blechmann
-2

Geben Sie dem Benutzer $ whoami, um etwas in diesem Ordner zu erstellen

sudo chown -R user /Library/Ruby/Gems/2.0.0
Rama Astadipati
quelle
Nein. Dieser Ordner gehört aus gutem Grund dem System. Das System verwendet ihn für eigene Zwecke. Es ist in Ordnung, ein Skript auszuführen, das darauf verweist, aber einen Sandbox-Ruby zu erstellen und zu verwenden, wenn Sie damit herumspielen möchten.
der Blechmann
-3

Sie können verwenden: gem install cocoapods --pre --user

Alex_Burla
quelle
-4

Das Installieren von gem oder das Aktualisieren von RubyGems schlägt mit einem Berechtigungsfehler fehl. Geben Sie dann diesen Befehl ein

sudo gem install cocoapods
Hardip Kalola
quelle
1
Dies wurde in den anderen Antworten behandelt. Bitte lesen Sie die anderen Antworten, bevor Sie eine erstellen, um sicherzustellen, dass Ihre etwas Neues bietet.
der Blechmann
-6

Ich habe das benutzt und gearbeitet.

$ sudo chown myuser /var/lib/gems

Felipe Francisco
quelle
Siehe die Kommentare in den anderen Antworten zur Verwendung sudo.
der Blechmann
-18

Der Grund für den Fehler liegt darin, dass Sie nicht als Root-Benutzer am Terminal angemeldet sind.

Wenn Sie bereits über Root verfügen, verwenden Sie enable auf Ihrem Mac im Terminaltyp

$ su

Wenn Sie keinen Root-Benutzer haben, müssen Sie ihn mithilfe der folgenden Schritte aktivieren

  1. Wählen Sie im Apple-Menü die Option "Systemeinstellungen".
  2. Wählen Sie im Menü Ansicht die Option Benutzer & Gruppen.
  3. Klicken Sie auf die Sperre und authentifizieren Sie sich als Administratorkonto.
  4. Klicken Sie auf Anmeldeoptionen….
  5. Klicken Sie unten rechts auf die Schaltfläche „Bearbeiten…“ oder „Verbinden…“.
  6. Klicken Sie auf die Schaltfläche "Open Directory Utility ...".
  7. Klicken Sie im Fenster des Verzeichnisdienstprogramms auf die Sperre.
  8. Geben Sie einen Administratorkontonamen und ein Kennwort ein und klicken Sie auf OK.
  9. Wählen Sie im Menü Bearbeiten die Option Root-Benutzer aktivieren.
  10. Geben Sie das Root-Passwort, das Sie verwenden möchten, in die Felder Passwort und Überprüfen ein und klicken Sie auf OK.

Mehr dazu auf http://support.apple.com/kb/ht1528

Zumindest funktioniert es bei mir, nachdem ich ein paar Stunden festgefahren bin.

Mohammad Arif
quelle
Warum abstimmen? Könnt ihr bitte den Grund dafür schreiben?
Mohammad Arif
8
Die Installation von Edelsteinen als Root ist eine schlechte Idee. stackoverflow.com/questions/2119064/…
spuder