Mantendo as dependências de seu projeto Ruby atualizadas


Leia em 1 minuto

Em muitos projetos criados com Rails, mantemos uma lista de dependências—normalmente gems—que estão atreladas a uma versão específica, mas que podem utilizar versões mais novas sem ter nenhum tipo de problema. Manter suas dependências atualizadas é extramente importante, principalmente em casos de atualizações de segurança.

Meu ambiente de desenvolvimento consiste em ter um RVM Gemset para cada projeto, com seu próprio arquivo .rvmrc, tornando muito fácil a tarefa de descobrir o que está desatualizado, já que a lista de gems é menor.

Um comando muito conveniente do RubyGems permite listar todas as dependências que estão desatualizadas. Trata-se de gem outdated. Em um dos meus projetos, esse comando listou as seguintes atualizações:

$ gem outdated
aruba (0.2.1 < 0.2.3)
bluecloth (2.0.7 < 2.0.9)
bson (1.0.4 < 1.0.9)
bson_ext (1.0.4 < 1.0.9)
bundler (1.0.0 < 1.0.2)
cucumber (0.8.5 < 0.9.1)
gherkin (2.1.5 < 2.2.7)
mongo (1.0.7 < 1.0.9)
mongo_mapper (0.8.3 < 0.8.4)
plucky (0.3.4 < 0.3.5)
postmark (0.9.0 < 0.9.2)
rack-test (0.5.4 < 0.5.6)
rcov (0.9.8 < 0.9.9)
thor (0.14.0 < 0.14.2)

Como o Rails 3 depende de versões específicas para garantir que nada irá quebrar, algumas gems não podem ser atualizadas; é o caso de rack-test (0.5.4) e thor (0.14.0).

Para atualizar para as versões mais recentes, basta instalar novamente as gems, como no exemplo abaixo:

$ gem install aruba bluecloth bson bson_ext bundler cucumber gherkin mongo mongo_mapper plucky postmark rcov

Depois, você pode remover as gems mais antigas. O RubyGems também possui um comando para esta tarefa.

$ gem cleanup

Às vezes, o comando gem cleanup irá avisar que alguma gem depende da versão que você está removendo. Neste caso, você pode verificar as dependências desta gem para ver se ela precisa de uma versão específica com o comando gem dependency.

$ gem dependency sinatra
Gem sinatra-1.0
  builder (>= 0, development)
  erubis (>= 0, development)
  haml (>= 0, development)
  less (>= 0, development)
  rack (>= 1.0, runtime)
  rack-test (>= 0.3.0, development)
  shotgun (>= 0.6, < 1.0, development)