641 Stimmen

Wie installiert man ein Gem oder aktualisiert RubyGems, wenn es mit einem Berechtigungsfehler fehlschlägt?

Ich versuche, einen Edelstein zu installieren, indem ich gem install mygem oder aktualisieren Sie RubyGems mit gem update --system und schlägt mit dieser Fehlermeldung 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 dieses Problem lösen kann?

36voto

Hendrik Punkte 4621

Bei mir lag das Problem an der Verwendung von rbenv und vergessen, die richtige Version global einzustellen.

Also musste ich es mit rbenv global xxx

In meinem Fall habe ich Folgendes installiert 2.0.0-p247 also musste ich den Befehl erteilen:

rbenv global 2.0.0-p247
rbenv rehash

Danach funktionierte alles einwandfrei.

26voto

Justin Leveck Punkte 2200

Sie müssen Ihre Pfade korrigieren.

Um festzustellen, ob dieses Problem gelöst werden kann, führen Sie Folgendes aus:

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 zu Ihrem Profil und speichern Sie ihn.

  3. Laden Sie Ihr Profil neu ( source ~/.zshenv für mich).

  4. Exécuter rbenv rehash .

Wenn Sie nun which gem sollten Sie einen lokalen Pfad erhalten, auf den Sie Zugriffsrechte haben:

/Users/justin/.rbenv/shims/gem

18voto

Michael Punkte 7019

Versuchen Sie nathanwhy's Antwort bevor Sie meine ursprüngliche Antwort unten verwenden. Seine Empfehlung von --user-install sollte den gleichen Zweck erfüllen, ohne dass Sie sich mit Ihren .bash_profile oder bestimmen Sie Ihre Ruby-Version.


Wenn Sie nicht auf eine bestimmte Ruby-Version angewiesen sind, können Sie die Schwergewichtige Ruby-Umgebungsmanager-Optionen und fügen Sie einfach diese Zeilen in ~/.bash_profile :

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

Der Pfad wurde von der ursprünglichen Ausgabe von 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 line, right here. -----
     - /System/Library/.../usr/lib/ruby/gems/2.0.0
  ...

Nein sudo erforderlich, und Sie können das bereits installierte Ruby von Apple verwenden.

17voto

thebiggestlebowski Punkte 2392

Das hat bei mir funktioniert. Außerdem, wenn Sie gems als Root vorher installiert haben, behebt es das Problem, indem es die Eigentümerschaft wieder auf Sie zurückändert (besser für die Sicherheit).

sudo chown -R `whoami` /Library/Ruby/Gems

15voto

JezC Punkte 1828

Es gibt zwei Routen: Verwenden Sie entweder rbenv oder RVM. Für beide gibt es unten Rezepte. Bevor Sie das tun, möchten Sie wahrscheinlich die Installation lokaler Dokumente für Gems abschalten.

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

Dann:

install rbenv

install ruby-build

laufen:

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 greifen nicht in die Systemkonfiguration ein. Wenn Sie diese Frage stellen, sollten Sie nicht in die Systemsicherheit eingreifen, und Sie werden mehr Zeit damit verbringen, zu verstehen, auf welche Probleme Sie stoßen könnten, als nur eine einfache Möglichkeit zu haben, das Problem zu vermeiden, mit dem Sie angefangen haben. Lernen Sie InfoSec später, wenn Sie mehr über das Betriebssystem und die Programmierung wissen.

Als Alternative können Sie stattdessen "RVM" verwenden: Zu rvm installieren laufen:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Das Ergebnis ist dasselbe: Sie erhalten ein lokales Ruby- und Gem-System, das nicht mit den Systemversionen kollidiert. Es gibt keine Notwendigkeit für Homebrew, oder Überschreiben von System-Libs, etc.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X