Le Blog du Geek Joyeux

Plus moins vite tu codes, moins plus vite ça plante

Versionner ses scripts de seeding avec versioned_seeds

| Commentaires

Si vous vous retrouvez dans le besoin de faire des imports de données ou des insertions scriptées dans une application Rails, de nos jours vous n’avez pas vraiment d’autre choix que de créer des tâches rake (ou consorts) pour le faire.

Dans cette idée, j’ai écrit la gem versioned_seeds qui permet de stocker ces scripts dans un dossier spécifique et de les utiliser à la manière des migrations.

Son installation se fait grâce à l’ajout de la ligne suivante dans votre Gemfile :

1
gem 'versioned_seeds', require: false

Le principe est simple, vous appelez un générateur qui va créer au besoin le dossier et un script dans celui ci. Le nom du script commence par un timestamp, comme les migrations, ce qui va permettre à versioned_seeds de l’enregistrer et de ne pas l’exécuter plusieurs fois.

1
2
3
rails g versioned_seeds:seed_file nom_du_script
        create db/seeds
        create db/seeds/20111207201942_nom_du_script.rb

Vous n’avez plus qu’à écrire votre script puis, une fois terminé, à appeler une tâche rake qui va l’exécuter:

$ rake vs:next

Cette tâche va trouvé le prochain script non chargé jusqu’à présent et le lancer. Si vous avez généré plusieurs scripts, vous pouvez faire appel à la commande rake vs:all qui va les appeler un à un.

Pour savoir où vous en êtes de vos scripts, vous pouvez faire appel à rake vs:status pour connaitre la version du dernier script chargé.

Pensez simplement à ignorer le fichier .versioned_seeds dans Git, il sert à stocker la liste des scripts déjà lancés et il ne doit pas être versionné puisqu’il est spécifique à chaque machine.

Le code est disponible sur Github et la gem sur rubygems.org.

Commentaires