problema di autorizzazione all'installazione di gem


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.

L'utente di login corrente è qichunren e l'utente qichunre ha i permessi di scrittura con .gem dir. Vorrei sapere perché gem non installa prima i file nella mia directory home .gem? Perché il mio gem common prima desidera installare i file in /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8

Risposte:


52

Per un'installazione Ruby a livello di sistema, diventa root. Per esempio:

$ sudo gem install hpricot

Tuttavia, l'approccio moderno in molte circostanze, incluso nello sviluppo, consiste nell'usare uno strumento che ti consenta di installare e utilizzare facilmente Ruby come un normale utente. Questo ti consente di evitare di dover diventare root. Ci sono alcuni di questi strumenti e quello che uso è 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

40
Non utilizzare sudo perché li installerai come root e non avrai accesso ad essi quando utilizzi il tuo utente normale. Usa RVM e gemsets.
Ryan

4
ad esempiorvm gem install hpricot
AJP

4
Potresti voler eliminare questa risposta. Manterrai i punti e risparmierai alle persone un sacco di mal di testa.
Olhovsky

172

Prova a impostare GEM_HOMEe GEM_PATHa ~/.gem,

Per la sessione del terminale corrente, digita semplicemente:

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

Se vuoi che siano impostati ogni volta che apri un terminale, aggiungi i comandi sopra al tuo ~/.bashrcfile.

Per una soluzione più completa alla configurazione di un ambiente ruby ​​personalizzato, vedere questo tutorial di Site5KB , che descrive l'utilizzo di un .gemrcfile.


11
Questa è la vera risposta giusta. Non usare sudo installando cose se non devi.
Jesse O'Brien

Il collegamento nella risposta sembra essere cambiato. Il primo passo di questa guida ha portato a termine la stessa cosa per me: kb.site5.com/ruby-on-rails/…
Mike S

@ MikeSlutsky Grazie per averlo sottolineato. In futuro, se trovi un collegamento interrotto (o un collegamento che è cambiato e non è più rilevante), sentiti libero di inviare un suggerimento di "modifica" se pensi di avere un sostituto decente.
meagar

@meagar Ho aggiornato il collegamento fornito da @ Mike-Slutsky, ma ho notato che è documentazione per la .gemrcconfigurazione. Per i principianti della gemma di rubino, questo è scoraggiante, quando capisco che la tua soluzione è quella molto più semplice che ho aggiunto. La soluzione funziona per me, ma come novizio Ruby, conferma che le mie modifiche sono in linea con il tuo intento.
David LeBauer

1
Ricordati di aggiungere il tuo GEM_PATH al PATH globale. Questo è quello che faccio: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

8

Ricevo questo errore sul mio server condiviso tramite l'hosting 1and1. la mia soluzione è stata l'aggiunta del file--user-install dell'opzione, che la installa solo per il tuo utente connesso (che è tutto ciò di cui hai bisogno in un ambiente server condiviso) esempio; installazione di sass

gem install sass --user-install

È interessante notare che sto ottenendo questo errore anche se ho specificato --user-install.
sschuberth

4

Se stai usando rbenv e questo sta accadendo, devi aggiungere quanto segue al tuo .bash_profile:

export RBENV_ROOT="$HOME/.rbenv"

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

0

reinstallare ruby ​​risolvere il mio problema.

brew install ruby
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.