Non hai i permessi di scrittura per la directory /var/lib/gems/2.3.0


104

Ho ruby ​​installato sul mio Ubuntu 16.04.

$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.

Qualsiasi aiuto sarà molto apprezzato!


Puoi provare a installare RVM e installare una versione più recente di ruby ​​come 2.3.3
Anton Skovorodko

Per il commento 3: il pacchetto "python-software-properties" non è disponibile dovresti sostituire per software-properties-common
Francisco Pedraza

1
L'opzione RVM, e imho un'installazione ancora migliore e semplice come una pura "installazione da parte dell'utente" (al contrario di una globale che richiede diritti) potrebbe essere una cosa molto migliore che armeggiare con i diritti!
Frank Nocke

8
Vorrei che questo flusso spiegasse perché questo OP aveva questo problema e perché dovrebbero abbandonare una versione di Ruby a favore sia di Ruby che di un gestore di installazioni multiple (RVM o RBEVN). Non sono in grado di dire con certezza se il consiglio qui è basato esclusivamente sulle preferenze personali. Spero ci sia dell'altro dietro a questo consiglio.
BaldEagle

Risposte:


153

Per prima cosa devi disinstallare il ruby ​​installato da Ubuntu con qualcosa di simile sudo apt-get remove ruby.

Quindi reinstallare ruby ​​usando rbenv e ruby-build secondo i loro documenti:

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

L'ultimo passaggio è installare Bundler:

gem install bundler
rbenv rehash

Allora divertiti!

Derek


8
Le istruzioni su come installare Ruby (su rotaie) sono qui gorails.com/setup/ubuntu/16.04
Andrzej Rehmann

5
Sono un po 'reticente a fare la disinstallazione, poiché richiede anche la disinstallazione di programmi dipendenti ( vim-gnomead esempio). Immagino che preferirei sapere perché in primo luogo è necessario scrivere /var/lib/...per l'installazione di un utente ... Ho fatto un sudo gem installquando non necessario?
PlasmaBinturong

4
Sono d'accordo con @AntonSkovorodko, sarebbe bello se la risposta potesse giustificare la disinstallazione di Ruby
blong

4
Basta fare attenzione quando si disinstalla Ruby in ambiente Cinnamon (è successo in Linux Mint 18.2), dopo il riavvio non sono riuscito a eseguire il sistema in modalità grafica. Quando ti succede, vai su CLI tramite Ctrl+Alt+F1ed esegui i seguenti comandi (disinstalla e installa di nuovo Cinnamon): sudo apt purge cinnamon && sudo apt install cinnamon
Kout

2
poiché questa risposta invecchia, probabilmente vorrai sapere quali sono le ultime disponibili: rbenv install -lper un elenco di tutte le versioni disponibili, quindi rbenv install 2.5.1per la versione 2.5.1 o qualsiasi altra cosa desideri.
Paul Sturm

60

Se vuoi usare la distribuzione Ruby invece di rb-env / rvm, puoi impostare un GEM_HOMEper il tuo attuale utente. Inizia creando una directory per archiviare le gemme Ruby per il tuo utente:

$ mkdir ~/.ruby

Quindi aggiorna la tua shell per usare quella directory GEM_HOMEe per aggiornare la tua PATHvariabile per includere la directory bin di Ruby gem.

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

(L'ultima riga ricaricherà le variabili d'ambiente nella tua shell corrente.)

Ora dovresti essere in grado di installare Ruby gems sotto il tuo utente usando il gemcomando. Sono stato in grado di farlo funzionare con Ruby 2.5.1 in Ubuntu 18.04. Se stai usando una shell che non è Bash, dovrai modificare lo script di avvio per quella shell invece di bashrc.


2
L'ho fatto, poi ho ricevuto un errore su "non riesco a trovare i file di intestazione per ruby", quindi ho letto questo: stackoverflow.com/a/4502672/2245874 , e non ho seguito tutto ma ho fatto sudo apt install ruby -gems, e poi ha funzionato per me.
rapina

1
Credo che @robm significasse ruby-dev non ruby-gems
Altreus

3
Questo è probabilmente più appropriato per gli utenti di ruby ​​che non hanno bisogno di sviluppare su più versioni.
danielcooperxyz

1
Hai descritto un ottimo modo Linux per riparare la mia installazione di ruby ​​senza strumenti aggiuntivi, solo il buon vecchio bash :)
Denis Trofimov

30

(Gennaio 2019) Per installare Ruby utilizzando lo script Rbenv, segui questi passaggi:

1. Innanzitutto, aggiorna l'indice dei pacchetti e installa i pacchetti necessari allo strumento ruby-build per compilare Ruby dal sorgente:

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. Successivamente, esegui il seguente comando curl per installare sia rbenv che ruby-build:

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

3. Aggiungere $ HOME / .rbenv / bin al PERCORSO di sistema.

Se stai usando Bash, esegui:

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

Se stai usando Zsh esegui:

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

4. Installa l'ultima versione stabile di Ruby e impostala come versione predefinita con:

rbenv install 2.5.1
rbenv global 2.5.1

Per elencare tutte le versioni di Ruby disponibili puoi usare: rbenv install -l

5. Verifica che Ruby sia stato installato correttamente stampando il numero di versione:

ruby -v

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

FONTE: Come installare Ruby su Ubuntu 18.04

EDIT: installa rubygems:

sudo apt-get install rubygems

2
questo è fantastico! bello e succinto. L'ho seguito esattamente (tranne le .zshrcmodifiche che ho fatto a mano) e ha funzionato perfettamente. Allo stesso modo in cui hai aggiunto come installare rubygems, ti suggerirei di aggiungere forse come aggiornare in un secondo momento la versione ruby ​​installata (immagino che tu esegua di nuovo i comandi rbenv installe rbenv globale forse rbenv uninstallper
eliminare

1
È fantastico! Funziona perfettamente su Ubuntu 18.04 WSL.
robe007

1
Questa è una risposta più elegante.
rashedcs

14

Piuttosto che cambiare proprietario, cosa che potrebbe bloccare altri utenti locali o, un giorno o l'altro, il tuo server ruby ​​/ cose di distribuzione ... in esecuzione con un utente diverso ...

Preferirei semplicemente estendere i diritti di quella particolare cartella a ... beh, tutti:

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

(Ho riscontrato anche il tuo errore. Quindi questo è abbastanza verificato.)


1
Avevo anche bisogno di indirizzare la cartella / usr / local / bin, ma questa soluzione ha funzionato: "ERRORE: durante l'esecuzione di gem ... (Gem :: FilePermissionError) Non hai i permessi di scrittura per la directory / usr / local / bin . "
eb80

10

Prova a usare chown -Rnella var/lib/gemsdirectory, assegnando la proprietà all'utente [ rubyusername] in questo esempio, l'utente che installerà e svilupperà con gems.

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

Questo cambia ricorsivamente tutto sotto la directory gems . Per una maggiore sicurezza su sistemi multiutente, puoi anche creare un gruppo, invece di chowning il singolo rubyusername, e aggiungere utenti a quel gruppo.


2
Può risolvere il problema, ma viene visualizzato un altro problema: ERRORE: durante l'esecuzione di gem ... (Gem :: FilePermissionError) Non hai i permessi di scrittura per la directory / usr / local / bin; quindi immagino che qualcos'altro sia sbagliato invece del permesso.
derek

3

Basandosi sulla risposta di derek sopra, in genere non è consigliabile utilizzare l'istanza di Ruby fornita dal sistema per il proprio lavoro di sviluppo, poiché gli strumenti di sistema potrebbero dipendere dalla particolare versione o posizione dell'installazione di Ruby. Simile a questa risposta per Mac OSX , ti consigliamo di seguire le istruzioni di derek sull'uso di qualcosa come rbenv ( RVM è un'alternativa simile) per installare la tua istanza Ruby.

Tuttavia, non è necessario disinstallare la versione di sistema di Ruby, le istruzioni di installazione di rbenv forniscono un meccanismo per assicurarsi che l'istanza di Ruby disponibile nella shell sia l'istanza di rbenv, non l'istanza di sistema. Questo è il

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

linea nella risposta di Derek.


2

Ho riscontrato lo stesso errore nelle azioni GitHub. L'aggiunta ha sudorisolto il problema.

sudo gem install bundler

0

Reinstallare Compass ha funzionato per me .. È una magia!

sudo gem install -n /usr/local/bin compass

0

Ubuntu 20.04:

Opzione 1: imposta una directory di installazione gem per il tuo account utente

Per bash (per zsh, useremmo .zshrcovviamente)

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

Opzione 2: usa lo snap

Disinstallare apt-version ( ruby-full) e reinstallarlo consnap

sudo apt-get remove ruby
sudo snap install ruby --classic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.