ruby - saber - Desinstalar todas las gemas instaladas, en OSX?
version of ruby (13)
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 anteriormente usaban la gem
todo el sistema, experimentaba muchos dolores de cabeza cuando trabajaba en varios proyectos. Esencialmente, él era el poster-niño de un convertido RVM.
¿Cómo puedo desinstalar elegantemente todas las gemas de su sistema OSX?
Al intentar eliminar las gemas instaladas como raíz, 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
El único comando me ayudó a limpiar todas las gemas e ignorar las gemas predeterminadas, que no se pueden desinstalar
for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Lo hice no hace mucho tiempo (la misma situación de conmutador RVM de poster-niño):
gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax
Toma la lista de todas las gemas (incluido el material de la versión), la corta para guardar solo el nombre de la gema y luego desinstala todas las versiones de dichas gemas.
El sudo
solo es útil si tiene gemas instaladas en todo el sistema, y no debería incluirse a menos que sea necesario.
Primero asegúrate de tener al menos la versión de gema 2.1.0
gem update --system
gem --version
# 2.6.4
Para desinstalar simplemente ejecute:
gem uninstall --all
Puede necesitar usar el comando sudo
:
sudo gem uninstall --all
Rubygems> = 2.1.0
gem uninstall -aIx
Si el terminal devuelve el siguiente 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 anterior como se muestra a continuación
sudo gem uninstall -aIx
E ingrese la contraseña de su cuenta mac mac ¡Hecho!
Si está usando Rubygems versión 2.1.0 o posterior, puede probar: gem uninstall --all
.
Si te gusta hacerlo usando ruby:
ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split('' '')[0]}` unless line.strip.empty? }"
Aclamaciones
También podría construir un nuevo Gemfile y ejecutar bundle clean --force
. Esto eliminará todas las demás gemas que no están incluidas en el nuevo Gemfile.
Una versión diferente más suelta, omitiendo el paso de corte, aprovechando la opción ''--no-versión'':
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.
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 necesite ejecutar ambos, porque "lista de gemas" y "lista de gemas de 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 sudo (antiguas) o recibiendo muchos errores (últimos).
Y para aquellos de ustedes que están aquí porque quieren eliminar todas las gemas con un cierto prefijo (¡ ejem , los estoy mirando, aws-sdk!), Pueden ejecutar algo como esto:
gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx
Obviamente pon tu consulta en lugar de aws-sdk-
. Necesitas el -I
allí para ignorar las dependencias.
Forma adoptada La respuesta anterior de Ando
Rubygems> = 2.1.0
gem uninstall -aIx
a
quita todas las versiones
Ignoro las dependencias
x
incluye ejecutables
Rubgems <2.1.0
for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
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í está excluyendo las gemas predeterminadas. Todas las demás gemas se desinstalarán. También puede precederlo con sudo
en caso de que obtenga problemas de permisos.