Désinstallez toutes les gemmes installées dans OSX?

Il y a des cas où je voudrais annuler et désinstaller toutes les installations de gem précédentes.

Par exemple, je devais aider un ami à migrer sa machine de développement de rails pour utiliser RVM. Comme ils utilisaient auparavant la gem échelle du système, il rencontrait de nombreux problèmes lorsqu’il travaillait avec plusieurs projets. Essentiellement, il était l’affiche pour un converti RVM.

Comment désinstaller élégamment toutes les gemmes sur son système OSX?

Rubygems> = 2.1.0

 gem uninstall -aIx 

a supprime toutes les versions
J’ignore les dépendances
x comprend les exécutables

Rubgems <2.1.0

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

Vous pouvez également créer un nouveau fichier Gemfile et exécuter un bundle clean --force . Cela supprimera tous les autres gems qui ne sont pas inclus dans le nouveau Gemfile.

Une version légèrement différente, sautant l’étape de coupe, tirant parti de l’option ‘–no-version’:

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

Puisque vous supprimez tout, je ne vois pas la nécessité de l’option «I». Chaque fois que la gemme est enlevée, ça va.

Utiliser soit

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

ou

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

Selon ce que vous voulez, vous devrez peut-être exécuter les deux, car “gem list” et “sudo gem list” fournissent des listes indépendantes.

Ne mélangez pas une “liste de gemmes” normale avec une “désinstallation de gem” sudo-ed, ou l’inverse, sinon vous risquez de désinstaller les gems installés par sudo (ou les anciennes).

Si vous utilisez Rubygems version 2.1.0 ou ultérieure, vous pouvez essayer: gem uninstall --all .

Assurez-vous d’avoir au moins la version 2.1.0

 gem update --system gem --version # 2.6.4 

Pour désinstaller, lancez simplement:

 gem uninstall --all 

Vous devrez peut-être utiliser la commande sudo :

 sudo gem uninstall --all 

Si vous aimez le faire en utilisant Ruby:

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

À votre santé

Rubygems> = 2.1.0

 gem uninstall -aIx 

Si le terminal retourne sous l’erreur

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

Puis écrivez ci-dessus la commande comme ci-dessous

 sudo gem uninstall -aIx 

Et entrez le mot de passe de votre compte Mac OS Done !!

La seule commande m’a aidé à nettoyer toutes les gemmes et ignore les gemmes par défaut, qui ne peuvent pas être désinstallées

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

Je l’ai fait il n’y a pas si longtemps (même affiche-enfant RVM switcher situation):

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

Prend la liste de toutes les gemmes (y compris les trucs de version), les coupe pour ne garder que le nom de la gemme, puis désinstalle toutes les versions de ces gemmes.

Le sudo n’est utile que si vous avez installé des gems dans tout le système, et ne doit pas être inclus, sauf si nécessaire.

Et pour ceux d’entre vous qui êtes ici parce que vous voulez supprimer toutes les gemmes avec un certain préfixe (je vous regarde aws-sdk!), Vous pouvez lancer quelque chose comme ceci:

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

De toute évidence, mettez votre requête à la place de aws-sdk- . Vous avez besoin de l’ -I pour ignorer les dépendances.

Formulaire adopté par Ando

Lorsque vous essayez de supprimer des gems installés en tant que root, xargs semble s’arrêter quand il rencontre une erreur en essayant de désinstaller un gem par défaut:

 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 

Cela ne fonctionnera pas pour tout le monde, mais voici ce que j’ai utilisé à la place:

 sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; 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 ici exclut les gemmes par défaut. Toutes les autres gemmes seront désinstallées. Vous pouvez également le faire précéder de sudo si vous rencontrez des problèmes de permission.