it-swarm.com.de

Die Installation von gem oder das Aktualisieren von RubyGems schlägt mit einem Fehler bei der Berechtigung fehl

Der Versuch, einen Edelstein (gem install mygem) zu installieren oder RubyGems (gem update --system) zu aktualisieren, schlägt mit diesem Fehler fehl:

 ERROR: Während der Ausführung von gem ... (Gem :: FilePermissionError) 
 Sie haben keine Schreibberechtigung für das Verzeichnis /Library/Ruby/Gems/2.0.0 .

Wer hat eine Idee, wie man das löst?

477
Gaurav

Sie haben keine Schreibrechte im Verzeichnis /Library/Ruby/Gems/1.8.

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

Dies ist die Version von Ruby, die von Apple für den eigenen Gebrauch installiert wurde. Obwohl es in Ordnung ist, geringfügige Änderungen daran vorzunehmen , wenn Sie wissen, was Sie tun , weil Sie sich über das Berechtigungsproblem nicht sicher sind, würde ich sagen Es ist keine gute Idee, 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 Ausgangsverzeichnis installiert ist und den Sie ändern können/Falzen/Spindel/Wechseln, ohne sich Gedanken darüber zu machen, das System Ruby durcheinander zu bringen.

Zwischen den beiden verwende ich rbenv, obwohl ich in der Vergangenheit oft RVM verwendet habe. Mit rbenv können Sie Ihre Ruby -Installation einfacher verwalten. RVM verfügt über eine Vielzahl von Funktionen und ist sehr leistungsfähig, jedoch als Ergebnis aufdringlicher. In beiden Fällen lesen Sie die Installationsdokumentation ein paar Mal _ , bevor Sie mit der Installation beginnen, je nachdem, was Sie auswählen.

307
the Tin Man

Versuchen Sie, --user-install hinzuzufügen, anstatt Sudo zu verwenden:

gem install mygem --user-install
303
nathanwhy

Sie sollten unbedingt einen Ruby-Versionsmanager verwenden.

Die korrekte Verwendung eines Befehls würde das Berechtigungsproblem beim Ausführen eines gem update-Befehls verhindern und beheben.

Ich empfehle rbenv.

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

Wenn Sie dies tun und Sie rbenv verwenden, vergewissern Sie sich, dass das Verzeichnis ~/.rbenv/shims vor dem Pfad für das System Ruby liegt.

$ echo $PATH zeigt Ihnen die Reihenfolge Ihres Ladepfads an.

Wenn Sie feststellen, dass Ihr Shims-Verzeichnis hinter Ihrem Ruby-Bin-Verzeichnis liegt, bearbeiten Sie Ihre ~/.bashrc-Datei und geben Sie diesen als letzten Exportbefehl PATH 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 wechselt zu einer neueren, vorinstallierten Version (siehe Referenzen unten).

Dies zeigt, dass ich eine neuere Version von Ruby verwende (dies wird wahrscheinlich nicht zu Gem :: FilePermissionError führen)

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

Normalerweise sollte es nicht nötig sein, einen Edelsteinbefehl mit Sudo vorzugeben. Wenn Sie das Gefühl haben, dies zu tun, ist wahrscheinlich etwas falsch konfiguriert.

Einzelheiten zu rbenv finden Sie hier:

87
l3x

Warum tust du es nicht: 

Sudo gem update --system
75
Bobz

Für mich bestand das Problem darin, rbenv zu verwenden und zu vergessen, die richtige Version global festzulegen.

Also musste ich es mit rbenv global xxx einstellen

In meinem Fall habe ich 2.0.0-p247 installiert, also musste ich den Befehl ausgeben:

rbenv global 2.0.0-p247
rbenv rehash

Dann hat alles gut funktioniert.

29
Hendrik

Sie müssen Ihre Pfade korrigieren

Um festzustellen, ob dieser Fix funktioniert, führen Sie Folgendes aus:

which gem

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

/usr/bin/gem

Um dies zu beheben, führen Sie die folgenden Schritte aus.

  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" "[email protected]"`;;
  *)
    command rbenv "$command" "[email protected]";;
  esac
}
  1. Kopieren Sie den Pfad in Ihr Profil und speichern Sie es 

  2. Laden Sie Ihr Profil neu (Quelle ~/.zshenv für mich)

  3. rbenv rehash ausführen

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

/Users/justin/.rbenv/shims/gem
21
Justin Leveck
Sudo gem update --system
Sudo gem install (gemfile)
17
Eliot Arntz

Damit wird das Problem auf MacOs Mojave 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 auf 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
14
Fmessina

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 beschäftigen und Sie müssen sich länger damit auskennen, um welche Probleme es sich handelt. Lernen Sie InfoSec später kennen, wenn Sie mehr über Betriebssystem und Programmierung erfahren.

Für eine Alternative verwenden Sie stattdessen 'RVM': Zum Installieren von 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- und Gem-System, das die Systemversionen nicht beeinträchtigt. Es besteht keine Notwendigkeit für Homebrew oder übergeordnete Systemlibs usw.

14
JezC

Ich habe diese Anleitung für Sudoless gem gefunden :

  1. brew install rbenv Ruby-build
  2. Sudo gem update --system
  3. exporte zu .bashrc hinzufügen:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
    
  4. Und füge dies schließlich zu deinem ~/.gemrc hinzu:

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

13
gopek

Das hat bei mir funktioniert. Wenn Sie zuvor Gems als Root installiert haben, wird das Problem dadurch behoben, dass Sie den Eigentümer zurückerhalten (bessere Sicherheit). 

Sudo chown -R `whoami` /Library/Ruby/Gems
13

Probieren Sie nathanwhy's answer aus, bevor Sie unten meine ursprüngliche Antwort verwenden. Seine Empfehlung von --user-install sollte den gleichen Zweck erfüllen, ohne dass Sie mit Ihrem .bash_profile herumfahren oder Ihre Ruby-Version bestimmen müssen.


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

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

Der Pfad wird von der ursprünglichen Ausgabe von gem env gestohlen:

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 ist keine Sudoing erforderlich, und Sie können den bereits installierten Ruby mit freundlicher Genehmigung von Apple verwenden.

13
Michael

Ich musste einen rbenv rehash machen, damit er auf meine lokale Gem-Bibliothek verweist. 

Es sieht so aus, als hätten Sie Ihren Edelsteinmanager auf die Systembibliothek verweisen lassen. Statt sich mit den Berechtigungen herumzureißen, tun Sie das Gleiche wie "rehash" für Ihren Manager, um die Dinge lokal anzuzeigen.

12
bobbdelsol

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

  1. Homebrew installieren:

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

    brew install Ruby
    
  3. Kompass installieren:

    Sudo gem install compass
    
11
Herbi Shtini

Älter und klüger

Tun Sie nicht, was ich hier sage, sondern wissen Sie immer, wenn Sie Sudo verwenden. Sie möchten wahrscheinlich etwas wie rbenv verwenden, um die Arbeit, die Sie ausführen, zu isolieren.


weg

lerne etwas über chown

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

chown steht, soweit ich das beurteilen kann, für den Besitz von Änderungen. 

Der Grund, warum ich nach dieser Antwort suchte, ist, weil gem install diesen Fehler heute auf mich gerichtet hat:

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, chown zu verwenden. Sie sehen, Ruby hat uns das Verzeichnis gegeben, auf das er Zugriff haben muss, und es scheint, als würde es ein Verzeichnis sein, das es oft benutzt.

In diesem Fall gibt es nur drei Dinge, die man wissen muss, um das Problem zu lösen, aber chown ist viel mächtiger und gibt Ihnen viel mehr Flexibilität, als ich es jetzt zeigen werde. Weitere Informationen finden Sie in der Quelle unten.

Die zwei sachen

  1. Username
  2. Verzeichnis

Wenn Sie sich in einer Shell befinden, ist der Benutzername leicht zu finden. Schauen Sie sich einfach die Ansage an. Meines sieht aus wie:

[email protected]:~\Desktop

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

Der Befehl zum eigentlichen Besitzerwechsel würde so aussehen.

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

Das -R ist als Flag bekannt, und das -R-Flag weist einen Befehl normalerweise an, etwas rekursiv auszuführen oder den Befehl mit allen Dingen auszuführen, die im Verzeichnis enthalten sind, sowie auf alle in den darin enthaltenen Verzeichnissen enthaltenen Elemente und so auf bis gibt es nichts anderes.

10
Breedly

Arbeite für mich:

Sudo gem uninstall cocoapods

Sudo gem install cocoapods
5
evya

Installieren Sie rbenv mit brew install rbenv;

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

Öffnen Sie ein neues Terminal und führen Sie gem install *** aus!

4
zhao

Prüfen Sie, ob Ihre Ruby-Version richtig ist. Wenn nicht, ändere es.

Das funktioniert für mich:

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

Wie von bobbdelsol ausgeführt, arbeitete rehash für mich:

==> 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...
2
Das

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

1
vaskort

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

Sudo chown -R user /Library/Ruby/Gems/2.0.0
0
Rama Astadipati

Getestet unter MacOS Mojave MIT ERFOLG:

  1. Deinstallieren Sie alle Ihre alten Ruby-Versionen (sagen wir, 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 das oben beschriebene Verfahren ausgeführt haben, können Sie jeden gem-Befehl erfolgreich ausführen.

0
Marcelo Gumiero