Tout comme la bombe atomique, les ministres de gauche dans un gouvernement de droite et la peine de mort, Bundler fait partie de ces solutions à des problèmes qui passent du statut de “bonnes idées” à celui de catastrophes ambulantes qui emmerdent tout le monde et dont on ne sait plus comment se débarrasser. Si vous n’avez jamais entendu parler de Bundler, vous avez bien de la chance, il s’agit du nouveau système de gestion des dépendances introduit avec la version 3 de Ruby on Rails.

La plupart des projets Ruby on Rails forcent aujourd’hui l’installation de toutes les librairies de gestion de base de données supportées par l’application, c’est à dire au moins MySQL et SQLite, parfois également PostgreSQL, sans tenir compte du fait que vous ayez ou non installé ledit moteur de base de données sur votre machine. Typo étant destiné à être installé par des utilisateurs “normaux”, il était hors de question que nous les obligions à éditer le Gemfile afin de choisir leur adaptateur SQL. Nous avons donc voulu voir avec Matijs dans quelle mesure il nous était possible d’ajouter du code Ruby à notre Gemfile.

Le code suivant va installer l’adaptateur indiqué dans le fichier de configuration config/database.yml au lieu de forcer l’installation de toutes les gems comme le fait le par ailleurs excellent Teambox.

En tête de votre Gemfile, ajoutez :

require 'fileutils'
require 'yaml'

env = ENV["RAILS_ENV"] ||= 'development'
dbfile = File.join("config", "database.yml")

unless File.exists?(dbfile)
  puts "You need to configure config/database.yml first"
  puts "Exiting"
  exit
else
  conf = YAML.load(File.read(dbfile))
  gem conf[env]['adapter']
end

Ce n’est qu’un exemple simple de ce qu’il est possible de faire, mais ça me tire une sacré épine du pied, tout en prouvant que le passage à Bundler ne simplifie rien, bien au contraire.

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: