Sie haben keine Schreibberechtigungen für das Verzeichnis /var/lib/gems/2.3.0

104

Ich habe Ruby auf meinem Ubuntu 16.04 installiert.

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

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

Jede Hilfe wird sehr geschätzt!

Derek
quelle
Sie können versuchen, RVM zu installieren und eine neuere Version von Ruby wie 2.3.3
Anton Skovorodko
Für Kommentar 3: Das Paket "Python-Software-Eigenschaften" ist nicht verfügbar, das Sie für Software-Eigenschaften-Common ersetzen sollten
Francisco Pedraza
1
Die RVM-Option und imho eine noch bessere und einfachere Installation als reine „Benutzerinstallation“ (im Gegensatz zu einer globalen, die Rechte fordernden) könnten eine viel bessere Sache sein, als an Rechten zu basteln!
Frank Nocke
8
Ich wünschte, dieser Stream würde erklären, warum dieses OP dieses Problem hatte und warum sie eine Version von Ruby zugunsten von Ruby und eines Managers für mehrere Installationen (RVM oder RBEVN) aufgeben sollten. Ich kann nicht sicher sagen, ob der Rat hier ausschließlich auf persönlichen Vorlieben beruht. Ich hoffe, hinter diesem Rat steckt noch mehr.
BaldEagle

Antworten:

151

Sie müssen zuerst den von Ubuntu installierten Ruby mit so etwas wie deinstallieren sudo apt-get remove ruby.

Dann installieren Sie Ruby mit rbenv neu und ruby-build gemäß den folgenden Dokumenten:

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

Der letzte Schritt ist die Installation von Bundler:

gem install bundler
rbenv rehash

Dann genieße es!

Derek

Derek
quelle
8
Eine Anleitung zum Installieren von Ruby (auf Schienen) finden Sie hier gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Ich bin etwas zurückhaltend bei der Deinstallation, da dazu auch abhängige Programme deinstalliert werden müssen ( vim-gnomezum Beispiel). Ich denke, ich würde lieber wissen wollen, warum es überhaupt /var/lib/...für eine Benutzerinstallation geschrieben werden muss ... Habe ich eine gemacht, sudo gem installwenn sie nicht benötigt wird?
PlasmaBinturong
4
Ich stimme @AntonSkovorodko zu, es wäre schön, wenn die Antwort die Deinstallation von Ruby rechtfertigen könnte
blong
4
Seien Sie vorsichtig, wenn Sie Ruby in einer Cinnamon-Umgebung deinstallieren (passiert in Linux Mint 18.2). Nach dem Neustart konnte ich das System nicht im Grafikmodus ausführen. Wenn Ihnen dies passiert, gehen Sie über zu CLI Ctrl+Alt+F1und führen Sie die folgenden Befehle aus (deinstalliert und installiert Cinnamon erneut): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
E: Package 'python-software-properties' has no installation candidate
Aaron Franke
60

Wenn Sie die Distribution Ruby anstelle von rb-env / rvm verwenden möchten, können Sie eine GEM_HOMEfür Ihren aktuellen Benutzer einrichten . Erstellen Sie zunächst ein Verzeichnis zum Speichern der Ruby-Edelsteine ​​für Ihren Benutzer:

$ mkdir ~/.ruby

Aktualisieren Sie dann Ihre Shell, um dieses Verzeichnis für zu verwenden GEM_HOMEund Ihre PATHVariable so zu aktualisieren , dass sie das Ruby gem bin-Verzeichnis enthält.

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(In dieser letzten Zeile werden die Umgebungsvariablen in Ihrer aktuellen Shell neu geladen.)

Jetzt sollten Sie in der Lage sein, Ruby Gems unter Ihrem Benutzer mit dem gemBefehl zu installieren . Ich konnte dies mit Ruby 2.5.1 unter Ubuntu 18.04 zum Laufen bringen. Wenn Sie eine Shell verwenden, die nicht Bash ist, müssen Sie stattdessen das Startskript für diese Shell bearbeiten bashrc.

James
quelle
2
Ich habe dies getan und dann die Fehlermeldung "Header-Dateien für Ruby können nicht gefunden werden" erhalten. Dann habe ich Folgendes gelesen: stackoverflow.com/a/4502672/2245874 , und nicht alles befolgt , aber sudo apt install ruby -gems, und dann hat es bei mir funktioniert.
Robm
1
Ich glaube, @robm bedeutete Ruby-Dev, nicht Ruby-
Gems
3
Dies ist wahrscheinlich besser für Ruby-Benutzer geeignet, die nicht gegen mehrere Versionen entwickeln müssen.
Danielcooperxyz
1
Sie haben eine wirklich gute Linux-Methode beschrieben, um meine Ruby-Installation ohne zusätzliche Tools zu reparieren, nur eine gute alte Bash :)
Denis Trofimov
29

(Januar 2019) Gehen Sie folgendermaßen vor, um Ruby mithilfe des Rbenv-Skripts zu installieren:

1. Aktualisieren Sie zunächst den Paketindex und installieren Sie die Pakete, die für das Ruby-Build-Tool erforderlich sind, um Ruby aus dem Quellcode zu erstellen:

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2. Führen Sie als Nächstes den folgenden Befehl curl aus, um sowohl rbenv als auch ruby-build zu installieren:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3. Fügen Sie dem Systempfad $ HOME / .rbenv / bin hinzu.

Wenn Sie Bash verwenden, führen Sie Folgendes aus:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Wenn Sie Zsh verwenden, führen Sie Folgendes aus:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4. Installieren Sie die neueste stabile Version von Ruby und legen Sie sie als Standardversion fest mit:

rbenv install 2.5.1
rbenv global 2.5.1

So listen Sie alle verfügbaren Ruby-Versionen auf: rbenv install -l

5. Stellen Sie sicher, dass Ruby ordnungsgemäß installiert wurde, indem Sie die Versionsnummer ausdrucken:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

QUELLE: So installieren Sie Ruby unter Ubuntu 18.04

BEARBEITEN: Rubygems installieren:

sudo apt-get install rubygems
Achraf JEDAY
quelle
2
das ist toll! schön und prägnant. Ich habe es genau befolgt (mit Ausnahme der .zshrcÄnderungen, die ich von Hand vorgenommen habe) und es hat perfekt funktioniert. Auf die gleiche Weise hinzugefügt , wie Sie zu installieren rubygems, würde ich vorschlagen , vielleicht hinzugefügt , wie später die installierte Ruby - Version zu aktualisieren (Ich vermute , Sie die gerade laufen rbenv installund rbenv globalBefehle wieder und vielleicht rbenv uninstallveraltete Versionen beschneidet)
gMale
1
Das ist großartig! Funktioniert perfekt unter Ubuntu 18.04 WSL.
robe007
1
Dies ist eine elegantere Antwort.
Rashedcs
14

Anstatt den Besitzer zu wechseln, wodurch andere lokale Benutzer gesperrt werden könnten, oder - eines Tages - Ihren eigenen Ruby-Server / Ihre eigenen Bereitstellungs-Dinge ... die unter einem anderen Benutzer ausgeführt werden ...

Ich würde lieber einfach die Rechte dieses bestimmten Ordners erweitern auf ... nun, alle:

cd /var/lib
sudo chmod -R a+w gems/

(Ich bin auch auf Ihren Fehler gestoßen. Dies ist also ziemlich verifiziert.)

Frank Nocke
quelle
1
Ich musste auch den Ordner / usr / local / bin adressieren, aber diese Lösung hat funktioniert: "FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError) Sie haben keine Schreibberechtigungen für das Verzeichnis / usr / local / bin . "
Eb80
10

Versuchen Sie es mit chown -Rdem var/lib/gemsVerzeichnis, indem Sie dem Benutzer [ rubyusername] in diesem Beispiel den Benutzer zuweisen, der mit Gems installiert und entwickelt wird.

 # chown -R rubyusername:rubyusername /var/lib/gems 

Dies ändert rekursiv alles im Gems- Verzeichnis. Für zusätzliche Sicherheit auf Mehrbenutzersystemen können Sie auch eine Gruppe erstellen, anstatt den einzelnen Rubyusernamen zu chownieren, und Benutzer zu dieser Gruppe hinzufügen.

Elritze
quelle
2
Es kann dieses Problem lösen, aber ein anderes Problem tritt auf: FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError) Sie haben keine Schreibberechtigungen für das Verzeichnis / usr / local / bin; Ich denke also, dass etwas anderes falsch ist als die Erlaubnis.
Derek
3

Aufbauend auf der obigen Antwort von Derek wird im Allgemeinen nicht empfohlen, die vom System bereitgestellte Ruby-Instanz für Ihre eigene Entwicklungsarbeit zu verwenden, da die Systemtools möglicherweise von der jeweiligen Version oder dem Speicherort der Ruby-Installation abhängen. Ähnlich wie bei dieser Antwort für Mac OS X sollten Sie die Anweisungen von derek befolgen, um etwas wie rbenv ( RVM ist eine ähnliche Alternative) zum Installieren Ihrer eigenen Ruby-Instanz zu verwenden.

Es ist jedoch nicht erforderlich, die Systemversion von Ruby zu deinstallieren. Die Installationsanweisungen für rbenv bieten einen Mechanismus, mit dem sichergestellt wird, dass die in Ihrer Shell verfügbare Ruby-Instanz die rbenv-Instanz und nicht die Systeminstanz ist. Dies ist das

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

Zeile in Dereks Antwort.

Sean Ray
quelle
2

Ich habe den gleichen Fehler in GitHub-Aktionen festgestellt. Durch Hinzufügen wurde sudodas Problem behoben.

sudo gem install bundler
Kolappan N.
quelle
0

Die Neuinstallation von Compass hat bei mir funktioniert. Es ist eine Magie!

sudo gem install -n /usr/local/bin compass
Haje
quelle
0

Ubuntu 20.04:

Option 1 - Richten Sie ein Gem-Installationsverzeichnis für Ihr Benutzerkonto ein

Für bash (für zsh würden wir natürlich verwenden .zshrc)

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Option 2 - Snap verwenden

Deinstallieren Sie die apt-version ( ruby-full) und installieren Sie sie mit neusnap

sudo apt-get remove ruby
sudo snap install ruby --classic
Schnatterer
quelle