gem Installationsberechtigungsproblem

90
qichunren@zhaobak:~> gem install hpricot
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 directory.

Der aktuelle Login-Benutzer ist qichunren, und der qichunre-Benutzer hat Schreibberechtigung mit .gem dir. Ich möchte wissen, warum gem nicht zuerst Dateien in meinem .gem-Verzeichnis zu Hause installiert? Warum mein Gem Common zuerst Dateien in /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 installieren möchte

Qichunren
quelle

Antworten:

51

Werden Sie für eine systemweite Ruby-Installation root. Beispielsweise:

$ sudo gem install hpricot

Der moderne Ansatz besteht jedoch unter vielen Umständen, auch in der Entwicklung, darin, ein Tool zu verwenden, mit dem Sie Ruby einfach installieren und als normaler Benutzer verwenden können. So können Sie vermeiden, dass Sie root werden müssen. Es gibt einige solcher Tools, und das, das ich verwende, ist RVM .

# install rvm into your ~
$ \curl -sSL https://get.rvm.io | bash -s stable

# install latest version of ruby into your ~
$ rvm install ruby

# installs a gem into your ~
$ gem install $SOME_GEM_NAME
Yfeldblum
quelle
40
Verwenden Sie sudo nicht, da Sie sie als root installieren und keinen Zugriff darauf haben, wenn Sie Ihren normalen Benutzer verwenden. Verwenden Sie RVM und Edelsteine.
Ryan
4
zBrvm gem install hpricot
AJP
4
Möglicherweise möchten Sie diese Antwort löschen. Sie behalten die Punkte und sparen den Menschen viel Kopfschmerzen.
Olhovsky
172

Versuchen Sie die Einstellung GEM_HOMEund GEM_PATHzu ~/.gem,

Geben Sie für die aktuelle Terminalsitzung einfach Folgendes ein:

export GEM_HOME=~/.gem
export GEM_PATH=~/.gem

Wenn Sie möchten, dass diese beim Öffnen eines Terminals festgelegt werden, fügen Sie die obigen Befehle zu Ihrer ~/.bashrcDatei hinzu.

Eine umfassendere Lösung zum Einrichten einer benutzerdefinierten Ruby-Umgebung finden Sie in diesem Lernprogramm von Site5KB , in dem die Verwendung einer .gemrcDatei beschrieben wird.

meagar
quelle
11
Dies ist die richtige Antwort. Gehen Sie nicht mit Sudo um, um Dinge zu installieren, wenn Sie nicht müssen.
Jesse O'Brien
Der Link in der Antwort scheint sich geändert zu haben. Der erste Schritt aus diesem Handbuch hat jedoch dasselbe für mich bewirkt
Mike S
@ MikeSlutsky Danke, dass du darauf hingewiesen hast. Wenn Sie in Zukunft einen defekten Link finden (oder einen Link, der sich geändert hat und nicht mehr relevant ist), können Sie gerne einen "Bearbeitungs" -Vorschlag einreichen, wenn Sie der Meinung sind, dass Sie einen anständigen Ersatz haben.
Meagar
@meagar Ich habe den Link von @ Mike-Slutsky aktualisiert, aber festgestellt, dass es sich um eine Dokumentation zur .gemrcKonfiguration handelt. Für Rubin-Edelstein-Neulinge ist dies entmutigend, wenn ich verstehe, dass Ihre Lösung die viel einfacheren ist, die ich hinzugefügt habe. Die Lösung funktioniert für mich, aber als Ruby-Neuling bestätigen Sie bitte, dass meine Änderungen Ihrer Absicht entsprechen.
David LeBauer
1
Denken Sie daran, Ihr GEM_PATH zum globalen PATH hinzuzufügen. Dies ist, was ich tue:PATH=$HOME/.gems/bin:$HOME/bin:$PATH GEM_HOME=$HOME/.gems GEM_PATH=$HOME/.gems:/var/lib/gems/2.1.0:/usr/lib/ruby/gems/2.1.0 export PATH GEM_HOME GEM_PATH
Spone
7

Ich habe diesen Fehler auf meinem gemeinsam genutzten Server über 1and1-Hosting erhalten. Meine Lösung bestand darin, die --user-installOption hinzuzufügen , die sie nur für Ihren angemeldeten Benutzer installiert (was alles ist, was Sie in einer Umgebung mit gemeinsam genutzten Servern benötigen). sass installieren

gem install sass --user-install
Max
quelle
Interessanterweise erhalte ich diesen Fehler , obwohl ich habe angegeben --user-install.
sschuberth
4

Wenn Sie rbenv verwenden und dies geschieht, müssen Sie Ihrem .bash_profile Folgendes hinzufügen:

export RBENV_ROOT="$HOME/.rbenv"

if [ -d $RBENV_ROOT ]; then
  export PATH="$RBENV_ROOT/bin:$PATH"
  eval "$(rbenv init -)"
fi
Kevin Qi
quelle
0

Ruby neu installieren mein Problem beheben.

brew install ruby
Jackyshan
quelle