Desinstalar todas as gemas instaladas, no OSX?

177

Há casos em que eu gostaria de reverter e desinstalar todas as instalações de gemas anteriores.

Por exemplo, eu precisava ajudar um amigo a migrar sua máquina de desenvolvimento de trilhos para usar o RVM. Como eles usavam o sistema anteriormente gem, ele estava com muitas dores de cabeça ao trabalhar com vários projetos. Essencialmente, ele era o garoto-propaganda de um convertido RVM.

Como posso desinstalar elegantemente todas as jóias do sistema OSX?

crftr
fonte
1
Hoje em dia isso é desnecessário. O RVM sabe onde procurar as gemas depois de mudar para a versão correta do Ruby.
Franklin Yu
1
yes Y | gem uninstall -a -I
stopanko 17/05
Apenas uma nota rápida para @FranklinYu - esse nem sempre é o caso. Eu tive casos em que uma cópia instalada globalmente do Nokogiri parecia sempre ter precedência sobre o gemset RVM, e o global precisava ser desinstalado.
Nathan Crause 7/08/19
@NathanCrause Então é um bug no RVM e deve ser relatado. Tenho certeza de que esse não é o comportamento pretendido do RVM.
Franklin Yu
@FranklinYu você está certo, mas até que esse problema seja resolvido, ainda haveria a necessidade de uma maneira de limpar todas as gemas. Eu estava me referindo apenas ao ponto de ser "desnecessário", o que seria verdade em uma situação ideal, mas, ei, as coisas vão para o lado o tempo todo.
Nathan Crause 8/08/19

Respostas:

427

Rubygems> = 2.1.0

gem uninstall -aIx

aremove todas as versões
Iignora dependências
xinclui executáveis

Rubgems <2.1.0

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
crftr
fonte
1
Duh, você bater-me à velocidade :)
Romain
3
Então, é claro, você vai querer voltar a instalar uma lista sã das gemas padrão que para mim é: "gem install bundler json minitest ancinho rdoc"
Wil Moore III
5
lista de gemas | cut -d "" -f1 | sudo xargs gem desinstalação -Iax -pedras para mim
Lesyk
5
Não funciona: 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 Embora este seja um pouco perigoso, você pode suprimir erros comfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Darren Cheng
46

Você também pode criar um novo Gemfile e executar bundle clean --force. Isso removerá todas as outras jóias que não estão incluídas no novo Gemfile.

bswinnerton
fonte
3
Isso é muito útil :)
user1190286
1
melhor resposta porque a unidade de teste não pode ser desinstalada e mata o processo.
westonplatter 11/07/2013
2
Sim, esta é a melhor resposta. Eu sinto que o OP deve escolher este post 2.0.0.
TheTuxRacer
2
Esta é certamente a trabalhar para mim e muito mais elegante do que outras versões
Crispen Smith
29

Uma versão diferente, mais leve, pulando a etapa de corte, aproveitando a opção '--no-version':

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

Como você está removendo tudo, não vejo a necessidade da opção 'I'. Sempre que a gema é removida, tudo bem.

Thiago Ganzarolli
fonte
1
sudonão deve ser necessário se as gemas foram instaladas por um usuário comum.
Sampablokuper
Veja a minha resposta por um motivo pelo qual eu votei mal. Eu queria comentar aqui, mas os comentários não permitem linhas ...
aercolino 28/09
bom, pode remover um monte de pedras preciosas, mas algo dosen`t-lo como pacote, ancinho, rvm
coolesting
Muito elegante, mas falha devido à incapacidade de remover gemas padrão. Em vez disso, sugerir a solução de crftr
Freedom_Ben
11

Primeiro, verifique se você tem pelo menos a versão 2.1.0 da gem

gem update --system
gem --version
# 2.6.4

Para desinstalar, basta executar:

gem uninstall --all

Pode ser necessário usar o sudocomando:

sudo gem uninstall --all
coletar
fonte
10

Use um

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

ou

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

Dependendo do que você deseja, pode ser necessário executar os dois, porque "gem list" e "sudo gem list" fornecem listas independentes.

Não misture uma "lista de gemas" normal com uma "desinstalação de gemas" sudo-ed nem o contrário, caso contrário você poderá desinstalar as gemas instaladas no sudo (anterior) ou com muitos erros (último).

aercolino
fonte
Você está certo, eu editei minha resposta para excluir o sudo. Para ambas as versões, os usuários podem confiar na sua resposta.
Thiago Ganzarolli
9

Se você estiver usando Rubygems versão 2.1.0 ou posterior, você pode tentar: gem uninstall --all.

rrrub
fonte
3
Deve ser 'gema' e não 'gemas'.
coletar
6

Se você gosta de fazer isso usando ruby:

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

Felicidades

Haris Krajina
fonte
Estou recebendo um erro com este: Erro: Durante a execução de gem ... (Gem :: CommandLineError) Especifique pelo menos um nome gem (por exemplo gem construção GEMNAME)
mbdev
1
@mbdev fixo, hehe apoio às minhas respostas sobre Stack Overflow :)
Haris Krajina
Isso é útil, pois funciona no Windows, onde o shell de comando não é ... bom.
AdamC 02/09/2015
5

Rubygems> = 2.1.0

gem uninstall -aIx

Se o Terminal retornar abaixo do erro

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

Em seguida, escreva o comando acima como abaixo

sudo gem uninstall -aIx

E digite sua senha da conta do Mac OS Concluído !!

Kirtikumar A.
fonte
5

E para aqueles de vocês que estão aqui porque desejam remover todas as jóias com um determinado prefixo ( ahem , estou olhando para você aws-sdk!), Você pode executar algo assim:

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

Obviamente, coloque sua consulta em vez de aws-sdk-. Você precisa do -Ilá para ignorar dependências.

Formulário adotado Resposta anterior de Ando

Trevor Elwell
fonte
4

O único comando me ajudou a limpar todas as gemas e ignora as gemas padrão, que não podem ser desinstaladas

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

Eu fiz isso não faz muito tempo (a mesma situação de comutador RVM criança poster):

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

Pega a lista de todas as gemas (incluindo as versões), corta para manter apenas o nome da gema e depois desinstala todas as versões dessas gemas.

Isso sudosó é útil se você tiver gemas instaladas em todo o sistema e não deve ser incluído, a menos que seja necessário.

Romain
fonte
1

Ao tentar remover as gemas instaladas como raiz, o xargs parece parar quando encontra um erro ao tentar desinstalar uma gema padrão:

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


Isso não funcionará para todos, mas aqui está o que eu usei:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done
Zaz
fonte
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 aqui está excluindo gemas padrão. Todas as outras gemas serão desinstaladas. Você também pode precedê-lo sudocaso tenha problemas de permissão.

moeabdol
fonte