En voulant migrer l'un de mes projets Ruby on Rails de la version 2.0 à la version 2.1, j'ai découvert qu'en fait il n'y avait pas une totale rétro compatibilité. Une fois de plus, c'est assez désagréable de devoir mettre à jour son application vers une nouvelle version ... Voici quelques notes que j'ai trouvé à droite à gauche afin de faciliter la tâche.

Tout d'abord, config.action_view.cache_template_extensions dans config/environments/development a été purement et simplement éjecté. Jusque là tout va bien, il y a juste à supprimer la ligne.

Ensuite, il semble que le ''eager loading'' ai changé, ainsi lorsque l'on faisait

Table1.find(:all, :include=>"table2",:conditions=>["table3_id=?",1])

table2 ayant une colonne table3_id Pas de problème, un left join était généré. Dans rails 2.1, une erreur

Mysql::Error: Unknown column 'table3_id' in 'where clause': SELECT * FROM `table1`     WHERE (table2_id=1)

Je ne suis pas sur de comprendre quel est l'utilité du include à présent, il n'empêche qu'il faut à présent :

Table1.find(:all, :joins=>"table2",:conditions=>["table3_id=?",1])

pour obtenir le même résultat.

Enfin, pas mal de plugins plantent lamentablement, par exemple Globalize ou le plugin de thème. Il semble que pour les deux ce soit un problème avec les fonctions de template :

ActionView::Base::register_template_handle

étant remplacé par

ActionView::Template.register_template_handler

et

pick_template_extension

étant instancié via @finder

@finder.pick_template_extension

J'ai trouvé deux patch pour régler ça. Pour le plugin de thème c'est ici, et pour Globalize, . Problème pour Globalize, j'avais une erreur "can't dup FalseClass". Je n'ai pas cherché à comprendre et j'ai hacké vite fait bien fait le fichier vendor/plugins/globalize/lib/globalize/rails/action_view.rb avant la ligne

pn = Pathname.new(template_file_name)

J'ai juste ajouté :

if !template_file_name
   template_file_name=""
end

Je suis sur que pleins d'autres trucs peuvent encore poser problème, mais pour l'instant mon application semble fonctionner.