Utiliser bundler 0.9 avec rails 2.3.5

  • par julien

Avec la sortie de Rails 3 beta, bundler vient remplacer l’ancienne commande “config.gem” introduite dans Rails 2.2.

Bundler a un gros avantage sur l’ancienne méthode, la gestion des gems utilisée par l’application n’est plus du tout dépendante de l’application elle même. Avant, un simple “rake gems” devait charger tout le stack rails pour pouvoir lister les gems necessaires à l’application. Maintenant, “bundle show” peut parfaitement s’éxécuter sans faire le moindre appel à Rails.

Bundler est donc en train de devenir LA méthode de gestion des gems pour une appli. Rails 3 fonctionne avec bundler “out of the box”, mais pas les précédentes versions de rails, telle la 2.3.5.

Voici donc comment procéder si vous voulez utiliser bundler avec vos anciennes applications en 2.3.* :

Tout d’abord, il faut rajouter à la fin de “boot.rb” le code suivant :

Ensuite, il faut créer le fichier “config/preinitializer.rb” (si il n’existe pas déjà) :

begin
  require "rubygems"
  require "bundler"
  if Gem :: Version . new ( Bundler :: VERSION ) <= Gem :: Version . new ( "0.9.20" )
    raise RuntimeError , "Your bundler version is too old." +
     "Run `gem install bundler` to upgrade."
  end
  # Set up load paths for all bundled gems
  ENV [ "BUNDLE_GEMFILE" ] = File . expand_path ( "../../Gemfile" , __FILE__ )
  Bundler . setup
end

Enfin, il ne vous reste plus qu’à créer le fichier “Gemfile” en vous inspirant de l’exemple suivant :

# include at least one source and the rails gem
source :gemcutter
gem 'rails' , '~> 2.3.5' , :require => nil
gem 'sqlite3-ruby' , :require => 'sqlite3'
# Devise 1.0.2 is not a valid gem plugin for Rails, so use git until 1.0.3
# gem 'devise', :git => 'git://github.com/plataformatec/devise.git', :ref => 'v1.0'
group :development do
  # bundler requires these gems in development
  gem 'rails-footnotes'
end
group :test do
  # bundler requires these gems while running tests
  gem 'rspec'
end
view raw Gemfile This Gist brought to you by GitHub.

Une fois que vous y êtes, faites un simple

bundle

pour voir toutes les commandes qui s’offrent à vous

bundle check

vérifiera si les gems nécessaires à l’application sont bien installées. Si ce n’est pas le cas

bundle install

s’en chargera. Une fois votre appli fonctionnelle sur votre machine de dev,

bundle lock

bloquera les versions des gems que vous avez d’installées sur votre machine de dev, pour que les autres développeurs avec qui vous travaillez installent exactement ces mêmes version avec un “bundle install”.

“bundle lock” crée un dossier “.bundle” à la racine de l’application. Si vous utilisez git, il faudra rajouter

.bundle/*

à votre gitignore car les informations contenues dans le .bundle sont propres à vos chemins d’installation sur votre machine.

Bundler évolue très vite et contient beaucoup d’autres fonctionnalités intéressantes, pour vos déploiements pas exemple. Allez faire un tour sur la page github ou bien sur le site de Yehuda Katz, le créateur de bundler, pour en savoir plus.