¿Desinstalar todas las gemas instaladas en OSX?

177

Hay casos en los que me gustaría revertir y desinstalar todas las instalaciones de gemas anteriores.

Por ejemplo, necesitaba ayudar a un amigo a migrar su máquina de desarrollo de rieles para usar RVM. Como habían estado utilizando el sistema anteriormente gem, estaba experimentando muchos dolores de cabeza cuando trabajaba con múltiples proyectos. Esencialmente, él era el niño poster de un converso RVM.

¿Cómo puedo desinstalar elegantemente todas las gemas en su sistema OSX?

crftr
fuente
1
Hoy en día esto es innecesario. RVM sabe dónde buscar las gemas después de cambiar a la versión correcta de Ruby.
Franklin Yu
1
yes Y | gem uninstall -a -I
stopanko
Solo una nota rápida para @FranklinYu: este no es siempre el caso. He tenido casos en los que una copia de Nokogiri instalada globalmente parecía tener siempre un precedente sobre el conjunto de gemas RVM, y la global tuvo que ser desinstalada.
Nathan Crause el
@NathanCrause Entonces es un error en RVM y debe informarse. Estoy bastante seguro de que este no es el comportamiento previsto de RVM.
Franklin Yu
@FranklinYu tienes razón, pero hasta que se resuelva este problema, aún sería necesario una forma de purgar todas las gemas. Solo me refería al punto de ser "innecesario", lo cual sería cierto en una situación ideal, pero bueno, las cosas van de lado todo el tiempo.
Nathan Crause

Respuestas:

427

Rubygems> = 2.1.0

gem uninstall -aIx

aelimina todas las versiones
Iignora las dependencias
x incluye ejecutables

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
fuente
1
Duh, me ganaste a toda velocidad :)
Romain
3
Entonces, por supuesto, querrás volver a instalar una lista sensata de gemas predeterminadas que para mí es: "gem install bundler json minitest rake rdoc"
Wil Moore III
55
lista de gemas | cortar -d "" -f1 | desinstalación de sudo xargs gem -Iax
funcionó
55
No funciona: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(gema 2.0.3)
M. Anthony Aiello
@Anthony Aunque esto es un poco peligroso, puede suprimir los errores confor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng
46

También puede construir un nuevo Gemfile y ejecutarlo bundle clean --force. Esto eliminará todas las otras gemas que no están incluidas en el nuevo Gemfile.

bswinnerton
fuente
3
Esto es muy útil :)
user1190286
1
mejor respuesta porque test-unit no se puede desinstalar y mata el proceso.
westonplatter
2
Sí, esta es la mejor respuesta. Siento que OP debería elegir esta publicación 2.0.0.
theTuxRacer
2
Esto ciertamente funciona para mí y es mucho más elegante que otras versiones
Crispen Smith
29

Una versión diferente más ligera, omitiendo el paso de corte, aprovechando la opción '--no-version':

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

Como está eliminando todo, no veo la necesidad de la opción 'I'. Cada vez que se quita la gema, está bien.

Thiago Ganzarolli
fuente
1
sudono debería ser necesario si las gemas fueron instaladas por un usuario común.
sampablokuper
Vea mi respuesta por una razón por la que voté en contra. Quería comentar aquí pero los comentarios no permiten líneas ...
aercolino
bueno, puede eliminar muchas gemas, pero algo no se parece a un paquete, rastrillo, rvm
enfriar
Muy elegante pero falla debido a la incapacidad de eliminar gemas predeterminadas. Sugerir la solución de crftr en su lugar
Freedom_Ben
11

Primero asegúrese de tener al menos gema versión 2.1.0

gem update --system
gem --version
# 2.6.4

Para desinstalar simplemente ejecute:

gem uninstall --all

Puede que necesite usar el sudocomando:

sudo gem uninstall --all
recoger
fuente
10

Utilizar cualquiera

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

o

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

Dependiendo de lo que desee, es posible que deba ejecutar ambos, porque "lista de gemas" y "lista de gemas sudo" proporcionan listas independientes.

No mezcle una "lista de gemas" normal con una "desinstalación de gemas" sudo-ed ni al revés, de lo contrario, puede terminar desinstalando gemas instaladas en sudo (anteriores) u obteniendo muchos errores (últimos).

aercolino
fuente
Tienes razón, edité mi respuesta para excluir sudo. Para ambas versiones, los usuarios pueden confiar en su respuesta.
Thiago Ganzarolli
9

Si está utilizando la versión 2.1.0 Rubygems o temprano, puede intentar: gem uninstall --all.

rrrub
fuente
3
Debería ser 'gema' no 'gemas'.
recoge el
6

Si te gusta hacerlo con ruby:

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

Salud

Haris Krajina
fuente
Recibo un error con esto: ERROR: al ejecutar gem ... (Gem :: CommandLineError) Especifique al menos un nombre de gema (por ejemplo, gem build GEMNAME)
mbdev
1
@mbdev Solucionado, jeje brindando apoyo a mis respuestas en Stack Overflow :)
Haris Krajina
Esto es útil porque funciona en Windows donde el shell de comandos no es bueno.
AdamC
5

Rubygems> = 2.1.0

gem uninstall -aIx

Si el terminal regresa debajo del error

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

Luego escriba el comando de arriba como a continuación

sudo gem uninstall -aIx

E ingrese su contraseña de cuenta de Mac OS ¡Listo!

Kirtikumar A.
fuente
5

Y para aquellos de ustedes que están aquí porque desean eliminar todas las gemas con un cierto prefijo (¡ ejem, lo estoy mirando aws-sdk!) Pueden ejecutar algo como esto:

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

Obviamente poner en su consulta en lugar de aws-sdk-. Necesita el -Iallí para ignorar las dependencias.

Forma adoptada respuesta anterior de Ando

Trevor Elwell
fuente
4

El único comando me ayudó a limpiar todas las gemas e ignora las gemas predeterminadas, que no se pueden desinstalar

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

Lo hice no hace mucho tiempo (misma situación de conmutador RVM de póster-niño):

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

Toma la lista de todas las gemas (incluidas las cosas de la versión), la corta para mantener solo el nombre de la gema, luego desinstala todas las versiones de tales gemas.

Esto sudosolo es útil si tenía gemas instaladas en todo el sistema, y ​​no debe incluirse a menos que sea necesario.

Romain
fuente
1

Al intentar eliminar las gemas instaladas como root, xargs parece detenerse cuando encuentra un error al intentar desinstalar una gema predeterminada:

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


Esto no funcionará para todos, pero esto es lo que usé en su lugar:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
fuente
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 aquí excluye las gemas predeterminadas. Todas las demás gemas serán desinstaladas. También puede precederlo sudoen caso de que tenga problemas de permisos.

moeabdol
fuente