Installare gem o aggiornare RubyGems fallisce con l’errore delle autorizzazioni

Cercando di installare una gem ( gem install mygem ) o aggiornare RubyGems ( gem update --system ) fallisce con questo errore:

 ERRORE: durante l'esecuzione di gem ... (Gem :: FilePermissionError)
 Non hai i permessi di scrittura per la directory /Library/Ruby/Gems/2.0.0.

Qualcuno ha idea di come risolvere questo?

Non hai i permessi di scrittura nella directory /Library/Ruby/Gems/1.8.

significa esattamente questo, non hai il permesso di scrivere lì.

Questa è la versione di Ruby installata da Apple, per uso personale. Mentre è corretto apportare piccole modifiche a questo se sai cosa stai facendo , perché non sei sicuro del problema con le autorizzazioni, direi che non è una buona idea continuare su quella traccia.

Invece, ti suggerisco caldamente di usare Rbenv o RVM per gestire un Ruby separato, installato in una sandbox nella tua home directory, che puoi modificare / piegare / mandare / cambiare senza preoccuparti di rovinare il sistema Ruby.

Tra i due, io uso rbenv, anche se ho usato molto RVM in passato. rbenv adotta un approccio più “hands-off” per gestire l’installazione di Ruby. RVM ha molte funzionalità ed è molto potente, ma, di conseguenza, è più intrusivo. In entrambi i casi, LEGGERE la documentazione di installazione per loro un paio di volte prima di iniziare a installare quello che si sceglie.

Prova ad aggiungere --user-install invece di usare sudo :

 gem install mygem --user-install 

Dovresti davvero usare un gestore di versioni di Ruby.

L’utilizzo corretto di uno potrebbe impedire e risolvere il problema di authorization durante l’esecuzione di un comando di gem update .

Raccomando Rbenv .

Tuttavia, anche quando si utilizza un gestore di versioni di Ruby, è ansible che venga visualizzato lo stesso messaggio di errore.

Se lo fai, e stai usando rbenv, basta verificare che la directory ~/.rbenv/shims sia prima del percorso per il sistema Ruby.

$ echo $PATH ti mostrerà l’ordine del tuo percorso di caricamento.

Se si scopre che la directory shims arriva dopo la directory Ruby del sistema, quindi modificare il file ~/.bashrc e inserirlo come l’ultimo comando export PATH=$HOME/.rbenv/shims:$PATH : export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v ti mostra quale versione di Ruby stai usando

Questo dimostra che attualmente sto usando la versione di sistema di Ruby (di solito non va bene)

 $ ruby -v ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0] 

$ rbenv global 1.9.3-p448 mi $ rbenv global 1.9.3-p448 passare a una nuova versione preinstallata (vedi riferimenti sotto).

Questo dimostra che sto usando una versione più recente di Ruby (che probabilmente non causerà Gem :: FilePermissionError)

 $ ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0] 

In genere non dovrebbe essere necessario inserire un comando gem con sudo. Se senti la necessità di farlo, probabilmente qualcosa non è configurato correttamente.

Per i dettagli su rbenv vedere quanto segue:

Perché non lo fai:

 sudo gem update --system 

Per me il problema era dovuto all’utilizzo di rbenv e alla dimenticanza di impostare la versione corretta a livello globale.

Quindi ho dovuto impostarlo con rbenv global xxx

Nel mio caso ho installato 2.0.0-p247 quindi ho dovuto impartire il comando:

 rbenv global 2.0.0-p247 rbenv rehash 

Quindi tutto funzionava bene.

Devi correggere i tuoi percorsi

Per determinare se questa correzione funzionerà, eseguire quanto segue:

 which gem 

Questo dovrebbe generare una directory che non hai permessi per:

 /usr/bin/gem 

Per risolvere questo problema, attenersi alla seguente procedura.

  1. Determina il percorso che devi copiare sul tuo profilo:

     rbenv init - 

La prima riga dell’output è la linea che devi copiare sul tuo profilo:

 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" "[email protected]"`;; *) command rbenv "$command" "[email protected]";; esac } 
  1. Copia il percorso del tuo profilo e salvalo

  2. Ricarica il tuo profilo (fonte ~ / .zshenv per me)

  3. Esegui rbenv rehash

Ora, quando esegui la which gem , dovresti ottenere un percorso locale a cui sei autorizzato:

 /Users/justin/.rbenv/shims/gem 
 sudo gem update --system sudo gem install (gemfile) 

Esistono due percorsi: utilizzare rbenv o RVM. Ci sono ricette per entrambi sotto. Prima di farlo, probabilmente vuoi distriggersre l’installazione di documenti locali per le gemme.

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

Poi:

install rbenv

install ruby-build

correre:

 rbenv install 2.1.2 (or whatever version you prefer) rbenv global 2.1.2 gem update --system 

Questo installa una versione aggiornata del sistema gem nelle tue directory locali. Ciò significa che non interferire con la configurazione del sistema. Se ti stai ponendo questa domanda, non dovresti preoccuparti della sicurezza del sistema e dovrai dedicare più tempo a capire quali problemi potresti incontrare, piuttosto che avere un modo semplice per evitare il problema con cui hai iniziato. Scopri InfoSec più tardi, quando ne sai di più sul sistema operativo e sulla programmazione.

In alternativa, utilizzare “RVM”: Per installare rvm run:

 rvm install 2.1.2 rvm use 2.1.2 gem update --system 

Questo ha lo stesso risultato, si finisce con un sistema Ruby and Gem locale che non interferisce con le versioni del sistema. Non c’è bisogno di librerie di sistema Homebrew o di over-riding, ecc.

Prova la risposta di nathanwhy prima di usare la mia risposta originale qui sotto. La sua raccomandazione su --user-install dovrebbe raggiungere lo stesso scopo senza dover usare il tuo .bash_profile o determinare la tua versione ruby.


Se non sei preoccupato per una specifica versione di ruby, puoi saltare le opzioni del gestore dell’ambiente ruby ​​heavy-lift e aggiungere semplicemente queste righe a ~/.bash_profile :

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

Il percorso è stato rubato dall’output originale di 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 guy, right here. - /System/Library/.../usr/lib/ruby/gems/2.0.0 ... 

Non è richiesto alcun sudo e puoi utilizzare il ruby già installato, per gentile concessione di Apple.

Avevo bisogno di fare un rbenv rehash modo che rbenv rehash alla mia libreria Gem locale.

Sembra che tu abbia il tuo gem manager che punta alla libreria di sistema, quindi, invece di scherzare con le autorizzazioni, fai l’equivalente di “rehash” per il tuo manager per ottenere cose che puntano localmente.

Ho trovato questo how-to per sudo meno gem :

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. aggiungere esportazioni a .bashrc :

     export RBENV_ROOT="$(brew --prefix rbenv)" export GEM_HOME="$(brew --prefix)/opt/gems" export GEM_PATH="$(brew --prefix)/opt/gems" 
  4. E infine aggiungi questo al tuo ~/.gemrc :

     gem: -n/usr/local/bin 
  5. gem update --system

Sebbene molte di queste risposte siano corrette e funzionino, non sono le più corrette in quanto rappresentano una serie di pratiche non sicure o insegnano solo come risolvere questo problema.

Non avere i permessi di scrittura corretti per una cartella è un problema comune a cui sarai afflitto se stai installando pacchetti Python, pacchetti di nodes, ecc.

L’uso di sudo non è sicuro, perché consente al programma di installazione del pacchetto di fare tutto ciò che vuole e installare le cose ovunque lo desiderino. In breve, qualcuno potrebbe scrivere un pacchetto che installa una backdoor nel tuo computer e ruba tutti i dati della tua carta di credito.

Usare un ambiente virtuale come rbenv è una grande cosa da imparare come fare, perché ti permette di impacchettare la tua applicazione e spedirla piuttosto facilmente. Consiglio vivamente di utilizzare un ambiente virtuale. Inoltre, se non si è esperti in un ambiente virtuale, è ansible che si stiano installando i pacchetti più e più volte su tutto il sistema che si potrebbe invece installare a livello globale e utilizzare virtualmente. Non so rbenv, ma lo faccio molto con Virtualenv.


LA VERITÀ

La risposta è chown e chown ti renderà libero.

Non so se ti piace la riga di comando, ma questo renderà il lavoro su qualsiasi progetto con qualsiasi strumento che installa pacchetti nel tuo sistema un gioco da ragazzi.

chown per quanto posso dire, sta per cambiamento di proprietà.

La ragione per cui sono venuto alla ricerca di questa risposta è perché l’ gem install lanciato questo errore oggi:

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

Questa è l’occasione perfetta per usare chown . Vedi Ruby ci ha dato la directory a cui ha bisogno di accedere, e sembra che sia una directory che userà abbastanza spesso.

In questo caso, ci sono solo tre cose che è necessario conoscere per risolvere il problema, ma chown è molto più potente e ti garantisce molta più flessibilità di quanto non dimostri ora. Si prega di fare riferimento alla fonte in basso per ulteriori informazioni.

Le due cose

  1. Nome utente
  2. elenco

Se sei in una shell, trovare il nome utente è facile. Guarda il prompt. Il mio sembra:

 [email protected]:~\Desktop 

L’utente corrente è solo il nome prima di @ . Conosciamo la directory dai messaggi di errore, ma avete due scelte. Puoi limitare la tua authorization alla versione corrente usando ../gems/1.9.1 , oppure ../gems/1.9.1 permesso di scrittura per le gemme di tutte le versioni usando ../gems .

Il comando di cambiare effettivamente la proprietà sarebbe simile a questo.

 chown -R $(whoami) /absolute/path/to/directory 

Il -R è conosciuto come un flag e il flag -R indica in genere un comando per fare qualcosa in modo ricorsivo, o in altre parole eseguire il comando su ogni cosa che è contenuta nella directory, e tutte le cose contenute nelle directory contenute all’interno, e così via fino a che non c’è nient’altro.

Avevo formattato il mio Mac e molte soluzioni suggerite non funzionavano per me. Ciò che ha funzionato per me sono questi comandi nell’ordine corretto:

  1. Installa Homebrew:

     /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 
  2. Installa Ruby:

     brew install ruby 
  3. Installa bussola:

     sudo gem install compass 

Questo ha funzionato per me. Inoltre, se hai già installato gems come root, risolve il problema cambiando la proprietà (meglio la sicurezza).

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

Lavora per me:

 sudo gem uninstall cocoapods sudo gem install cocoapods 

Come sottolineato da bobbdelsol, rehash ha funzionato per me:

 ==> which ruby /usr/bin/ruby ==> rbenv install 1.9.3-p551 Downloading ruby-1.9.3-p551.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2 Installing ruby-1.9.3-p551... Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551 ==> which ruby /Users/username/.rbenv/shims/ruby ==> which gem /Users/username/.rbenv/shims/gem ==> gem install compass ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory. ==> ruby -v ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15] ==> rbenv global 1.9.3-p551 ==> ruby -v ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15] ==> rbenv global 1.9.3-p551 ==> rbenv rehash ==> ruby -v ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0] ==> gem install compass Fetching: sass-3.4.22.gem (100%) Fetching: multi_json-1.11.3.gem (100%) Fetching: compass-core-1.0.3.gem (100%) Fetching: compass-import-once-1.0.5.gem (100%) Fetching: chunky_png-1.3.5.gem (100%) Fetching: rb-fsevent-0.9.7.gem (100%) Fetching: ffi-1.9.10.gem (100%) Building native extensions. This could take a while... Fetching: rb-inotify-0.9.7.gem (100%) Fetching: compass-1.0.3.gem (100%) Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks! Successfully installed sass-3.4.22 Successfully installed multi_json-1.11.3 Successfully installed compass-core-1.0.3 Successfully installed compass-import-once-1.0.5 Successfully installed chunky_png-1.3.5 Successfully installed rb-fsevent-0.9.7 Successfully installed ffi-1.9.10 Successfully installed rb-inotify-0.9.7 Successfully installed compass-1.0.3 9 gems installed Installing ri documentation for sass-3.4.22... Installing ri documentation for multi_json-1.11.3... Installing ri documentation for compass-core-1.0.3... Installing ri documentation for compass-import-once-1.0.5... Installing ri documentation for chunky_png-1.3.5... Installing ri documentation for rb-fsevent-0.9.7... Installing ri documentation for ffi-1.9.10... Installing ri documentation for rb-inotify-0.9.7... Installing ri documentation for compass-1.0.3... Installing RDoc documentation for sass-3.4.22... Installing RDoc documentation for multi_json-1.11.3... Installing RDoc documentation for compass-core-1.0.3... Installing RDoc documentation for compass-import-once-1.0.5... Installing RDoc documentation for chunky_png-1.3.5... Installing RDoc documentation for rb-fsevent-0.9.7... Installing RDoc documentation for ffi-1.9.10... Installing RDoc documentation for rb-inotify-0.9.7... Installing RDoc documentation for compass-1.0.3... 

Controlla se la tua versione di Ruby è giusta. In caso contrario, cambialo.

Questo funziona per me:

 $ rbenv global 1.9.3-p547 $ gem update --system 

Puoi usare: gem installa cocoapods –pre –user

Installa rbenv da brew install rbenv ;

Quindi metti eval "$(rbenv init -)" alla fine di ~ / .bash_profile (o ~ / .zshrc di MacOS);

Apri un nuovo terminale ed esegui gem install *** funzionerà!

cd /Library/Ruby/Gems/2.0.0

Aperto .

tasto destro ottieni informazioni

clicca blocco

inserire la password

fai leggere e scrivere tutto

Installare gem o aggiornare RubyGems ha esito negativo con errore di autorizzazioni Quindi digitare questo comando

 sudo gem install cocoapods 

L’ho usato e ho funzionato.

$ sudo chown myuser /var/lib/gems

Il motivo dell’errore è perché non sei loggato come utente root sul terminale.

Se disponi già di abilitazione root sul tuo mac in tipo di terminale

 $ su 

Se non si dispone di un utente root, è necessario abilitarlo seguendo i passaggi seguenti

  1. Dal menu Apple seleziona Preferenze di Sistema ….
  2. Dal menu Visualizza, scegliere Utenti e gruppi.
  3. Fare clic sul lucchetto e autenticarsi come account amministratore.
  4. Fai clic su Opzioni di accesso ….
  5. Fai clic sul pulsante “Modifica …” o “Partecipa …” in basso a destra.
  6. Fai clic sul pulsante “Apri Utility Directory …”.
  7. Fare clic sul lucchetto nella finestra Utility Directory.
  8. Immettere un nome e una password dell’account amministratore, quindi fare clic su OK.
  9. Scegli Abilita utente root dal menu Modifica.
  10. Immettere la password di root che si desidera utilizzare nei campi Password e Verifica, quindi fare clic su OK.

Maggiori informazioni allo stesso su http://support.apple.com/kb/ht1528

Almeno funziona per me dopo essere rimasto bloccato per un paio d’ore.