Rémy Giard Rémy Giard 17 May 2010

Mise à jour d’une application Rails 2.2.2 vers Rails 3

Dans le monde Ruby, nous attendons tous avec impatience le sortie du prochain et tout nouveau Rails version 3.  Il a déjà de nombreux sites qui discutent de ce sujet et des nouvelles fonctionnalités à venir.  Or, dans le but m’y faire les dents, j’ai décidé de mettre à jour une de nos application interne en version 2.2.2 vers la version 3.  Je décris ici le processus et les embûches que j’ai rencontrés.

Pour commencer, je devais savoir ce qui n’était plus supporté dans la nouvelle version.  L’équipe de développement de Rails a publié un plugin qui permet de détecter ce qui n’est plus supporté.  Toutefois, ils ont aussi construit un plugin pour faciliter la transition qui permet l’utilisation de certaines fonctions non-incluses dans la version 3.  J’ai installé le premier plugin pour connaitre les changements à faire et j’ai ensuite installé le deuxième plugin.  Voici un résumé des changements principaux :

Comme embûches, j’ai dû mettre à jour ma version installée de Ruby.  Un excellent outil sous Ubuntu facilite l’utilisation de plusieurs version en même temps et c’est “rvm“.  Pour isoler mes tests à la transition vers Rails 3, j’ai préféré Ruby 1.8.7 à 1.9 pour ne pas avoir les problèmes d’encodage possibles dûs à l’utlisation de Ruby 1.9.  J’ai ensuite installé les gem nécessaire à l’application en plus de Rails 3.0.0.beta.  L’ajout de ces gem dans le fichier Gemfile est la nouvelle façon de faire.  J’étais maintenant prêt à migrer l’application.  Voici mes prochaines étapes :

  • Construire une application Rails par-dessus l’application existante ce qui a eu pour effet de créer les nouveaux fichiers nécessaires qui n’existait pas encore.  Pour ce, il faut seulement appeler “rails <app>” comme auparavant.
  • Créer le fichier “app/controllers/application_controller.rb” qui remplace maintenant “app/controllers/application.rb”.
  • Modifier les fichiers d’environnement (environment.rb, development.rb, etc) pour répondre à la nouvelle structure
  • Ajuster les routes selon le nouvel API
  • Remplacer ou supprimer les plugins de l’application.  Pour will_paginate, j’ai utilisé la branche “rails3” du répertoire sur github.  J’ai dû enlevé “exception_logger” qui n’est plus supporté
  • Depuis la version Rails 2.3.4, il n’est plus possible d’avoir un clé primaire dans les tables de jointure des relations “has_and_belongs_to_many”.  J’ai donc enlevé ces clés pour ne garder que celles de la liaison.  Il suffisait d’ajouter “:id => false” comme option du “create table” de la migration

Pour terminer, la migration d’une application Rails vers Rails 3 est une tâche faisable mais non sans embûche.  Il faut bien se renseigner sur les changements à Rails 3 pour bien identifer ce qui cause le problème.  Tout au long de la migration, j’ai dû effectuer des ajustements ici et là dans les controlleurs et les vues pour suivre les nouvelles façons de faire.  Or, la migration vers Rails 3 n’est pas isolé à seulement un niveau, mais presque partout (controlleurs, routes, vues, dépendances, configuration, etc).  De ce fait, il faut être vigilant et s’assurer de tester tous les chemins possibles.  Ici, si on a créé et maintenu nos tests unitaires et fonctionnels, nous sommes heureux de les avoir sous la main.  Voilà un excellent sujet pour une prochaine publication sur Le Lab …

Liens utiles:

topics are ,

Leave an opinion