Desinstalar versões antigas do Ruby gems

381

Eu tenho várias versões de uma gema Ruby:

$ gem list
rjb (1.3.4, 1.3.3, 1.1.9)

Como posso remover versões antigas, mas manter as mais recentes?

Philippe Blayo
fonte

Respostas:

654
# remove all old versions of the gem
gem cleanup rjb

# choose which ones you want to remove
gem uninstall rjb

# remove version 1.1.9 only
gem uninstall rjb --version 1.1.9

# remove all versions less than 1.3.4
gem uninstall rjb --version '<1.3.4'
Dylan Markow
fonte
259

Para remover versões mais antigas de todas as gemas instaladas, os seguintes 2 comandos são úteis:

 gem cleanup --dryrun

O comando acima irá visualizar quais gemas serão removidas.

 gem cleanup

O comando acima realmente os removerá.

Oh Ho
fonte
Não funciona na minha configuração cloud9 ubuntu ... tem que correr com sudo
MIRV - Matt
13

Tente algo parecido gem uninstall rjb --version 1.3.4.

Daniel O'Hara
fonte
11
a pergunta era "Como posso remover versões antigas, mas manter as mais recentes?" essa resposta removeria a versão mais recente.
austinheiman
10

Maneira de limpar quaisquer versões antigas de gemas.

sudo gem cleanup

Se você quiser apenas ver uma lista do que seria removido, você pode usar:

sudo gem cleanup -d

Você também pode limpar apenas uma gema específica especificando seu nome:

sudo gem cleanup gemname

para remover apenas uma versão específica como a 1.1.9

gem uninstall gemname --version 1.1.9

Se você ainda estiver enfrentando alguma exceção para instalar o gem, como:

gem inválido: o pacote está corrompido, exceção ao verificar: método indefinido `size 'para nil: NilClass (NoMethodError) em /home/rails/.rvm/gems/ruby-2.1.1@project/cache/nokogiri-1.6.6.2. gema

o, você pode removê-lo do cache:

rm /home/rails/.rvm/gems/ruby-2.1.1@project/cache/nokogiri-1.6.6.2.gem

Para mais detalhes:

http://blog.grepruby.com/2015/04/way-to-clean-up-gem-or-remove-old.html

user3118220
fonte
Você provavelmente não deveria estar usandosudo
PR Whitehead
8

gem cleanupusa comandos do sistema. As gemas instaladas são apenas diretórios no sistema de arquivos. Se você deseja excluir em lote, use rm -R.

  1. gem environment e observe o valor de GEM PATHS
  2. cd <your-gem-paths>/gems
  3. ls -1 |grep rjb- |xargs rm -R
Anatoly
fonte
2
"Gemas instaladas são apenas diretórios no sistema de arquivos." bom saber, graças
Philant
0

Pode ser necessário definir GEM_HOMEa limpeza para funcionar. Você pode verificar quais caminhos existem para gemfiles executando:

gem env

Tome nota da seção GEM PATHS.

No meu caso, por exemplo, com gemas instaladas na minha casa de usuário:

export GEM_HOME="~/.gem/ruby/2.4.0"
gem cleanup
lkraider
fonte