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?


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

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.


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.


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

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).


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.


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


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 !!


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


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

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.


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.