Impossibile installare gemme su OS X "El Capitan"


182

Non sono in grado di installare ed eseguire fakes3gem su El Capitan Beta 5.

Provai:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Poi ho provato a farlo nel modo dei cocoapodi. Ha funzionato per i cocoapodi ma non per i falsi3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

3
Non usare sudoper installare Ruby o cambiare gemme. Usa invece rbenv o RVM per installare e gestire Ruby. Leggi e segui le indicazioni sui rispettivi siti. E, in entrambi i casi, dopo l'installazione, non usare a sudomeno che tu non capisca cosa sta cambiando e perché vorresti farlo.
Tin Man,

Risposte:


333

Disclaimer: @theTinMan e altri sviluppatori Ruby sottolineano spesso di non utilizzare sudodurante l'installazione di gemme e indicano cose come RVM . Questo è assolutamente vero quando si fa lo sviluppo di Ruby. Vai avanti e usalo.

Tuttavia, molti di noi vogliono solo alcuni binario che sembra essere distribuito come una gemma (ad esempio fakes3, cocoapods, xcpretty...). Sicuramente non voglio preoccuparmi di gestire un rubino separato. Ecco le opzioni più veloci:

Opzione 1: continua a usare sudo

L'uso sudova probabilmente bene se si desidera che questi strumenti vengano installati a livello globale.

Il problema è che questi binari sono installati /usr/bin, il che è vietato da El Capitan. Tuttavia, è possibile installarli in /usr/local/bininvece. Ecco dove Homebrew installa i suoi contenuti, quindi probabilmente esiste già.

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

Le gemme verranno installate in /usr/local/bine ogni utente sul tuo sistema può usarle se è nel loro PERCORSO .

Opzione 2: installa nella tua home directory (senza sudo)

Quanto segue installerà le gemme ~/.geme inserirà i binari ~/bin(che dovresti quindi aggiungere al tuo PATH).

gem install fakes3 --user-install -n~/bin

Rendilo predefinito

Ad ogni modo, puoi aggiungere questi parametri ai tuoi in ~/.gemrcmodo da non doverli ricordare:

gem: -n/usr/local/bin

vale a dire echo "gem: -n/usr/local/bin" >> ~/.gemrc

o

gem: --user-install -n~/bin

vale a dire echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Suggerimento: puoi anche lanciarti --no-documentper saltare la generazione della documentazione per gli sviluppatori di Ruby.)


Grazie mille! Ho lottato con le nuove versioni di brew e ruby ​​ma ancora non riuscivo a superare il problema / usr / bin. Specificare il percorso desiderato durante l'esecuzione ha gem installrisolto il problema.
Daniel Saidi,

L' .gemrcdovrebbe avere gem: -n /usr/local/bin(bisogno di uno spazio dopo -n).
Paul Schreiber,

@PaulSchreiber Bene, lo sto usando senza uno spazio da cinque mesi. :) Sei sicuro?
nschum,

2
Più 1 per l'Opzione n. 2, che è un'alternativa praticabile e sicura se vuoi solo quei binari senza un Ruby separato. Le nostre home directory sono il luogo perfetto per le gemme aggiunte e una rapida modifica di PATH le rende accessibili. Non posso raccomandare l'opzione n. 1 perché qualcuno finirà per sovrascrivere un gioiello e rompere il loro sistema Ruby o il codice incorporato di Apple che lo utilizza, e quindi faranno ancora un'altra domanda su SO su come risolverlo.
Tin Man,

1
Questa è una risposta eccellente, ma forse obsoleta. Su Sierra, l'opzione di cui avevo bisogno era --install-dir / usr / local / bin
Ryan Ballantyne,

107

Nel mio caso, ho dovuto reinstallare Ruby usando Brew . Ciò sembra aver risolto il problema poiché posso installare nuovamente le gemme.

brew install ruby

Successivamente, è necessario disconnettersi e riconnettersi, graficamente o semplicemente riavviando il terminale.


Ha funzionato bene per me! Suppongo che si sbarazzi di qualsiasi stranezza nell'installazione di rubini in bundle ... IMO questa è la soluzione migliore.
13

Puoi dire quale rubino viene eseguito con `` quale -a rubino '' `` Sulla mia macchina che dà: `` $ quale -a rubino / usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` Per quanto riguarda perché / usr / local / bin è su PATH due volte - sembra che lo brew install rubymetta lì, anche se è già lì. Presumibilmente il rubino in / usr / local è configurato per installare le sue gemme in una posizione che non ha bisogno dell'accesso alla radice (che in realtà ha perfettamente senso).
WallStProg,

7
PS È necessario disconnettersi e riconnettersi (tramite Terminale) altrimenti il ​​problema gem installpersiste.
WallStProg,

Ha funzionato bene per me. Ho combinato la risposta accettata con questa. Grazie ad entrambi
youssman il

1
Non è necessario disconnettersi e accedere nuovamente. Corri rehashe assicurati che la tua shell capisca che c'è una nuova versione rubyprecedente di $PATH. Anche questo non sarà necessario nella situazione in cui non si era ancora eseguito rubynella sessione di shell.
Radon Rosborough,

38

Ciò è dovuto alla nuova funzione di sicurezza di OS X "El Capitan". Prova ad aggiungere --user-installinvece di usare sudo:

$ gem install *** --user-install

Ad esempio, se si desidera installare fake3 basta usare:

$ gem install fake3 --user-install

Sì! Grazie mille!
Louis Magnotti,

Dopo aver trascorso 30 minuti con l'approccio brew, chiudendo il terminale ecc. Alla fine questa soluzione ha funzionato il 10.10.5 Ma ancora non so perché l'approccio brew non ha funzionato. Si prega di precisare. che ruby ​​post brew installa / usr / bin / ruby
vikramvi il

1
Caspita ora il problema è tornato gem install redcarpet -v '3.3.4' - errore di lancio dell'installazione utente ATTENZIONE: non hai /Users/user_name/.gem/ruby/2.0.0/bin nel PERCORSO, gem gli eseguibili non verranno eseguiti. In precedenza non avevo
riscontrato

1
stackoverflow.com/questions/19579392/… , questo mi ha aiutato a risolvere finalmente il problema
vikramvi,


19

Devi aggiornare Xcode a quello più recente (v7.0.1) e tutto funzionerà normalmente.

Se dopo aver installato il nuovissimo Xcode e ancora non funziona, prova a installare gem in questo modo:

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

Per esempio:

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

10

Sembra che durante l'aggiornamento a OS X El Capitain, la directory / usr / local sia modificata in diversi modi:

  1. le autorizzazioni utente vengono ripristinate (questo è anche un problema per le persone che usano Homebrew)
  2. binari e collegamenti simbolici potrebbero essere stati eliminati o modificati

[Modifica] C'è anche una cosa preliminare da fare: aggiornare Xcode ...

Soluzione per n. 1:

$ sudo chown -R $(whoami):admin /usr/local

Questo risolverà i permessi sulla /usr/localdirectory che aiuterà quindi entrambi gem installe i brew install|link|...comandi a funzionare correttamente.

Soluzione al n. 2:

Problemi basati sul rubino

Assicurati di aver corretto i permessi della /usr/localdirectory (vedi sopra # 1)

Prima prova a reinstallare la tua gemma usando:

sudo gem install <gemname>

Nota che installerà l'ultima versione della gemma specificata.

Se non si desidera affrontare problemi di compatibilità con le versioni precedenti, è consigliabile determinare innanzitutto quale versione di quale gemma si desidera ottenere e quindi reinstallarla con -v version. Vedi un esempio di seguito per assicurarti che il sistema non ottenga una nuova versione di capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Problemi basati sulla produzione di birra

Aggiorna brew e aggiorna le tue formule

$ brew update
$ brew upgrade

Potrebbe anche essere necessario ricollegarne alcuni manualmente

$ brew link <formula>

3

Come è stato detto, il problema deriva da una funzione di sicurezza di Mac OSX da "El Capitan".

Utilizzando il sistema predefinito Ruby, il processo di installazione avviene nella /Library/Ruby/Gems/2.0.0directory che non è disponibile per l'utente e fornisce l'errore.

Puoi dare un'occhiata ai parametri dei tuoi ambienti Ruby con il comando

$ gem env

Esiste una DIRECTORY DI INSTALLAZIONE e una DIRECTORY DI INSTALLAZIONE UTENTE. Per utilizzare la directory di installazione dell'utente anziché la directory di installazione predefinita, è possibile utilizzare --user-installinvece il parametro come utilizzo sudoche non è mai un modo raccomandato di fare.

$ gem install myGemName --user-install

Non ci dovrebbero essere più problemi di diritti nel processo. Le gemme vengono quindi installate nella directory dell'utente:~/.gem/Ruby/2.0.0/bin

Ma per rendere disponibili le gemme installate, questa directory dovrebbe essere disponibile nel tuo percorso. Secondo le domande frequenti di Ruby , puoi aggiungere la seguente riga al tuo ~/.bash_profileo~/.bashrc

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

Quindi chiudi e ricarica il tuo terminale o ricarica il tuo .bash_profileo .bashrc( . ~/.bash_profile)


2

Questa è la soluzione che ho usato:

Nota: questa correzione è per compass come l'ho scritta su un'altra domanda SO, ma ho usato lo stesso processo per ripristinare la funzionalità di tutti i processi terminali, ovviamente le gemme che stai installando sono diverse, ma il processo è lo stesso.

Ho avuto lo stesso problema. È dovuto all'implementazione da parte di Apple di System Integrity Protection (SIP). Devi prima disabilitare che ...

Riavvia in modalità di ripristino:

Riavvia e tieni premuto Comando + R fino a quando non vedi il logo Apple.

Una volta avviato, selezionare Utilità> Terminale dalla barra superiore.

genere: csrutil disable

quindi digitare: reboot

Una volta riavviato

Apri il terminale di backup e inserisci i comandi:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Le singole gemme che hanno fallito devono essere riparate, quindi per ognuna le seguenti operazioni:

Sul mio computer questa è stata la prima dipendenza non funzionante, quindi l'ho elencata :

sudo gem pristine ffi --version 1.9.3

Procedere attraverso l'elenco delle gemme che devono essere riparate. In tutto stai cercando circa 10 minuti per risolverlo, ma avrai comandi terminali per il funzionamento della bussola.

Immagine dello schermo


2

Se la gemma che stai tentando di installare richiede librerie xml, prova questo:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

In particolare, ho riscontrato un problema durante l'installazione di nokogiri gem v 1.6.8 su OS X El Capitan

e alla fine questo ha funzionato per me:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Per assicurarti di aver installato libxml2 e libxslt, puoi fare:

brew install libxml2 libxslt
brew install libiconv

e quindi verificare che siano installati gli strumenti da riga di comando xcode:

xcode-select --install 

dovrebbe restituire questo errore:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

1

La reinstallazione di RVM ha funzionato per me, ma in seguito ho dovuto reinstallare tutte le mie gemme:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload

0

Ho riscontrato lo stesso problema dopo aver installato El Capitan, ho provato a installare sass e compass in un progetto symfony, il seguente comando ha restituito il seguente errore:

$ sudo gem installa bussola

ERRORE: errore durante l'installazione della bussola: ERRORE: impossibile creare l'estensione nativa della gemma.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

verifica di ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': il compilatore non è riuscito a generare un file eseguibile. (RuntimeError)

Quindi ho provato a installare sass con: $ sudo gem install sass

Ho ricevuto lo stesso messaggio di errore, dopo aver cercato su Google sono riuscito a installare sass usando il seguente comando:

$ sudo gem install -n / usr / local / bin sass

Quanto sopra ha funzionato per me con l'installazione di sass ma non ha funzionato per l'installazione della bussola. Ho letto che qualcuno da qualche parte aveva aperto un'istanza di xcode e poi l'ha chiusa di nuovo, quindi ha eseguito con successo lo stesso comando, dopo di che ha funzionato per loro. Ho tentato di aprire xcode ma mi è stato richiesto un messaggio che diceva che la versione di xcode installata non era compatibile con El Capitan. Quindi ho aggiornato xcode dall'App Store, ho eseguito nuovamente il comando seguente che questa volta è stato eseguito correttamente:

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

Sono stato quindi in grado di eseguire $ compass init

Ora ho tutte le mie gemme funzionanti e posso procedere a costruire delle cose adorabili di sass :)


0

Ho dovuto rm -rf ./vendorquindi correre di bundle installnuovo.


-1

Non mi piace installare roba con sudo. una volta che inizi con sudo non puoi smettere ..

prova a dare le autorizzazioni alla directory Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0

2
Non modificare la proprietà delle gemme del sistema Ruby. Ciò può causare problemi quando Mac OS tenta di aggiornare qualcosa.
Tin Man,

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.