Usando Bundler Com Rails 2.3
Este tutorial foi publicado originalmente em 17 de Janeiro de 2011, quando ainda era comum encontrar sistemas utilizando Rails 2.3 ao invés da versão 3, lançada meses antes. Foi minha primeira publicação no site 1up4dev.org, e agora deixo-o aqui para fins históricos.
Iniciando minha participação neste blog, vou apresentar uma solução rápida para um problema que eu tive e levei um certo tempo para encontrar uma resposta.
Caso você não conheça, Bundler é uma ferramenta criada para facilitar a instalação e atualização de aplicações e suas gems, resolvendo facilmente as dependências e criando ambientes homogêneos em máquinas diferentes. Em outras palavras, resolve de uma vez por todas aquele inferno que era ter que baixar gem por gem da sua aplicação e ainda assim correr o risco de encontrar alguma incompatibilidade.
O Rails 3 utiliza o Bundler por padrão, mas aplicações em Rails 2.x ainda dependem das gems declaradas no arquivo config/environment.rb, e ao copiar os arquivos para uma determinada máquina, você é obrigado a usar rake gems:install, que vai levar algum tempo rodando e não vai instalar tudo o que você precisa.
Ou pelo menos era assim que funcionava até você ler esse post.
Primeiro, considerando que você esteja no diretório raiz da sua aplicação, execute a sequência abaixo:
Antes de qualquer outra coisa, instale o Bundler na sua máquina executando o comando gem install bundler
No seu arquivo config/boot.rb, imediatamente antes da linha Rails.boot!, insira o bloco abaixo:
Crie um arquivo config/preinitializer.rb. Esse arquivo não existe no Rails 2.x, então se você não criar, não vai funcionar. Adicione as linhas abaixo nesse arquivo:
Crie um arquivo chamado Gemfile no raiz da sua aplicação. Entre em config/environment.rb, remova todas as instruções config.gem e as adicione no arquivo Gemfile conforme abaixo, sem o prefixo config. (ponto incluído).
Seu arquivo config/environment.rb era assim:
E agora é assim:
Bem mais limpo, não?
Já o seu recém criado arquivo Gemfile vai ficar assim:
Note que eu criei dois grupos: um com :development, :test e um com :production. Significa que as gems do primeiro grupo somente serão utilizadas em desenvolvimento e em testes, e as do segundo grupo somente serão usadas no ambiente de produção. O que está fora dos grupos será usado em qualquer ambiente.
Agora, finalmente você digita bundle install, aguarda alguns instantes e pronto! A sua aplicação está com todas as gems instaladas e suas devidas dependências.
Para listar as gems utilizadas, execute bundle list.
Sugestões, correções e críticas são bem vindas nos comentários.
Para mais informações, leia a documentação no site do Bundle: http://gembundler.com/
Originally published at 1up4dev.org.