Disinstallare tutte le gemme installate, in OSX?


177

Ci sono casi in cui vorrei ripristinare e disinstallare tutte le precedenti installazioni gem.

Ad esempio, dovevo aiutare un amico a migrare la sua macchina di sviluppo rotaie per utilizzare RVM. Dato che in precedenza avevano utilizzato tutto il sistema gem, stava sperimentando molti mal di testa quando lavorava con più progetti. In sostanza, era il bambino-poster per un convertito RVM.

Come posso disinstallare elegantemente tutte le gemme sul suo sistema OSX?


1
Oggi questo non è necessario. RVM sa dove cercare le gemme dopo essere passati alla giusta versione di Ruby.
Franklin Yu,

1
yes Y | gem uninstall -a -I
Stopanko,

Solo una breve nota a @FranklinYu - non è sempre così. Ho avuto casi in cui una copia di Nokogiri installata a livello globale sembrava avere sempre la precedenza sul gemset RVM e quella globale doveva essere disinstallata.
Nathan Crause,

@NathanCrause Quindi è un bug in RVM e dovrebbe essere segnalato. Sono abbastanza sicuro che questo non sia il comportamento previsto di RVM.
Franklin Yu,

@FranklinYu hai ragione, ma fino a quando un problema del genere non verrà risolto, ci sarebbe ancora bisogno di un modo per eliminare tutte le gemme. Mi riferivo solo al fatto che fosse "non necessario", il che sarebbe vero in una situazione ideale, ma ehi, le cose vanno sempre di lato.
Nathan Crause

Risposte:


428

Rubygems> = 2.1.0

gem uninstall -aIx

arimuove tutte le versioni
Iignora le dipendenze
xinclude gli eseguibili

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

1
Duh, mi hai battuto alla velocità :)
Romain,

3
Quindi, naturalmente, ti consigliamo di reinstallare un elenco sano di gemme predefinite che per me è: "gem install bundler json minitest rake rdoc"
Wil Moore III,

5
lista di gemme | cut -d "" -f1 | sudo xargs gem uninstall -Iax ha funzionato per me
lesyk,

5
Non funziona: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(gem 2.0.3)
M. Anthony Aiello,

@Anthony Anche se questo è un po 'pericoloso, puoi eliminare gli errori confor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng

46

Potresti anche creare un nuovo Gemfile ed eseguire bundle clean --force. Ciò rimuoverà tutte le altre gemme che non sono incluse nel nuovo Gemfile.


3
Questo è molto utile :)
user1190286

1
migliore risposta perché l'unità di test non può essere disinstallata e termina il processo.
Westonplatter,

2
Sì, questa è la risposta migliore. Sento che OP dovrebbe scegliere questo post 2.0.0.
theTuxRacer

2
Questo funziona sicuramente per me e molto più elegante delle altre versioni
Crispen Smith,

29

Una versione diversa più leggera, saltando la fase di taglio, sfruttando l'opzione '--no-version':

gem list --no-version |xargs gem uninstall -ax

Dato che stai rimuovendo tutto, non vedo la necessità dell'opzione "io". Ogni volta che la gemma viene rimossa, va bene.


1
sudonon dovrebbe essere necessario se le gemme sono state installate da un normale utente.
sampablokuper,

Vedi la mia risposta per un motivo per cui ho effettuato il downgrade. Volevo commentare qui, ma i commenti non consentono le righe ...
aercolino,

bene, può rimuovere un sacco di gemme, ma qualcosa di simile come fagotto, rastrello,
camper

Molto elegante ma non riesce a causa dell'incapacità di rimuovere le gemme predefinite. Suggerisci invece la soluzione di
crftr

11

Per prima cosa assicurati di avere almeno gem versione 2.1.0

gem update --system
gem --version
# 2.6.4

Per disinstallare è sufficiente eseguire:

gem uninstall --all

Potrebbe essere necessario utilizzare il sudocomando:

sudo gem uninstall --all

10

Usa entrambi

$ gem list --no-version | xargs gem uninstall -ax

o

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

A seconda di ciò che si desidera, potrebbe essere necessario eseguire entrambi, poiché "gemma list" e "sudo gem list" forniscono elenchi indipendenti.

Non mescolare un normale "elenco gemme" con una "disinstallazione gemma" sudo-ed né viceversa, altrimenti si potrebbe finire per disinstallare le gemme sudo installate (prima) o ottenere molti errori (seconda).


Hai ragione, ho modificato la mia risposta per escludere sudo. Per entrambe le versioni gli utenti possono fare affidamento sulla tua risposta.
Thiago Ganzarolli,

9

Se si utilizza la versione 2.1.0 Rubygems o poi, si può provare: gem uninstall --all.


3
Dovrebbe essere "gemma" non "gemme".
raccogliere il

6

Se ti piace farlo usando ruby:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

Saluti


Ricevo un errore con questo: ERRORE: Durante l'esecuzione di gem ... (Gem :: CommandLineError) Specificare almeno un nome di gemma (ad esempio gem build GEMNAME)
mbdev

1
@mbdev Risolto, mi ha fornito il supporto per le mie risposte su Stack Overflow :)
Haris Krajina

Questo è utile in quanto funziona in Windows dove la shell dei comandi è ... non va bene.
AdamC

5

Rubygems> = 2.1.0

gem uninstall -aIx

Se il terminale ritorna sotto l'errore

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

Quindi scrivere sopra il comando come di seguito

sudo gem uninstall -aIx

E inserisci la password del tuo account mac os Fatto !!


5

E per quelli di voi che sono qui perché volete rimuovere tutte le gemme con un certo prefisso ( ehm, ti sto guardando aws-sdk!) Puoi eseguire qualcosa del genere:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

Ovviamente inserisci la tua query anziché aws-sdk-. È necessario l'interno -Iper ignorare le dipendenze.

Forma adottata Risposta precedente di Ando


4

L'unico comando mi ha aiutato a ripulire tutte le gemme e ignora le gemme predefinite, che non possono essere disinstallate

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done

2

L'ho fatto non molto tempo fa (stessa situazione switcher RVM poster-child):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

Prende l'elenco di tutte le gemme (incl. Roba versione), lo taglia per mantenere solo il nome della gemma, quindi disinstalla tutte le versioni di tali gemme.

È sudoutile solo se le gemme erano installate a livello di sistema e non dovrebbero essere incluse se non in caso di necessità.


1

Quando si tenta di rimuovere le gemme installate come root, xargs sembra arrestarsi quando si verifica un errore nel tentativo di disinstallare una gemma predefinita:

sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR:  While executing gem ... (Gem::InstallError)
#    gem "test-unit" cannot be uninstalled because it is a default gem


Questo non funzionerà per tutti, ma ecco quello che ho usato invece:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done

1
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

grep qui esclude le gemme predefinite. Tutte le altre gemme verranno disinstallate. Puoi anche precederlo sudonel caso in cui tu abbia problemi di autorizzazione.

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.