Passer de rails 2.0 à rails 2.1
By jul on Wednesday, June 18 2008, 12:16 - Permalink
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, là. 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.
Comments
Salut, j'ai aussi le "can't dup FalseClass" avec Globalize et Rails 2.1, j'ai pourtant installé la branche globalize pour rails 2.1.
J'ai tenté ton truc du template_file_name="", effectivement je n'ai plus la meme erreur, mais bien sur il ne trouve pas le template ".html.erb" puisque le nom du fichier a été vidé juste avant...
Aurais-tu une idée ?
Je n'avais pas ce problème avant, ça apparait a des endroits qui fonctionnaient parfaitement avant.
Oups, j'ai trouvé... Il s'agit tout simplement de la view qui manquait, mais avec un message d'erreur provenant de globalize puisque c'est lui "loade" les views...
J'ai aussi le problème du "can't dup FalseClass" mais je ne parviens pas à le résoudre avec ton hack.
Et pourtant la view existe...
J'ai réglé le problème en commentant la ligne ci-dessous dans le init.rb du plugin :
# Load overriden Rails modules
require "globalize/rails/active_record"
#require "globalize/rails/action_view"
require "globalize/rails/action_mailer"
require "globalize/rails/date_helper"
require "globalize/rails/active_record_helper"
:-)
This post's comments feed