Maintenant nous allons passer de 1.2.6 à 2.0.2
Je ne l'ai pas dit dans mon post précédent tellement ça me paraissait évident, mais utiliser systématiquement subversion (ou un autre système: cvs, git...) pour pouvoir revenir en arrière. C'est indispensable !!
> rake rails:unfreeze
> svn delete vendor/rails
> gem list rails
*** LOCAL GEMS ***
rails (1.2.6)
> gem update rails
Successfully installed rails-2.0.2
1 gem installed
Gems updated: rails
> gem list rails
*** LOCAL GEMS ***
rails (2.0.2, 1.2.6)
> edit config/environment.rb
Changer
RAILS_GEM_VERSION = '1.2.6' unless defined? RAILS_GEM_VERSION
En:
RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION
>ruby script\about
      *******************************************************************
      * config.breakpoint_server has been deprecated and has no effect. *
      *******************************************************************
About your application's environment
Ruby version              1.8.6 (i386-mswin32)
RubyGems version          1.0.1
Rails version             2.0.2
Active Record version     2.0.2
Action Pack version       2.0.2
Active Resource version   2.0.2
Action Mailer version     2.0.2
Active Support version    2.0.2
Application root          C:/developement/ruby/appli
Environment               development
Database adapter          mysql
Database schema version   8
Si vous avez le même warning que moi, éditer le fichier development.rb et enlevé les lignes suivantes:
# Enable the breakpoint server that script/breakpointer connects to
config.breakpoint_server = true
puis installer ruby-debug comme expliqué ici: 
Fixing-config-breakpoint-server
> rake rails:update
modifie 
  config/boot.rb
  public/javascripts/control.js
  public/javascripts/dragdrop.js
  public/javascripts/effects.js
  public/javascripts/prototype.js
> rake log:clear tmp:clear db:test:purge
Editer database.yml
J'aime bien ajouter l'encoding pour MySql:
development:
  adapter: mysql
  *encoding: utf8* (sans les étoiles autour ;) )
  database: appli_development
  username: appli
  password: appli
  host: localhost
> rake db:reset
(optionnel ?)
> rake db:migrate:reset
...
m à j de db/schema.rb
> rake test
...
36 tests, 95 assertions, 0 failures, 0 errors
...
33 tests, 63 assertions, 0 failures, 0 errors
> ruby script/server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  INT => stop (no restart).
** Mongrel 1.1.4 available at 0.0.0.0:3000
** Use CTRL-C to stop.
/!\ FAILSAFE /!\  Tue Mar 18 10:16:56 +0100 2008
  Status: 500 Internal Server Error
  A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session = { :session_key => 
"_mya
pp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session/cookie_store.rb:91:in `ensure_secret_secure'
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session/cookie_store.rb:60:in `initialize'
...
http://localhost:3000/ retourne une erreur 500
Le plus simple que j'ai trouvé c'est de créer une nouvelle appli rails à côté:
> rails dummy
Remplacer le contenu de appli/config/environment.rb par celui de dummy (en garder une copie qq part)
> rake secret
Remplacer la ligne suivante:
  config.action_controller.session = {
    :session_key => '_dummy_session',
    :secret      => '1234abcde'
  }
par
  config.action_controller.session = {
    :session_key => '_appli_session',
    :secret      => 'secret generé par la commande rake secret'
  }
Ajouter toutes les conf specifiques à votre appli.
Par exemple dans mon cas j'avais ActionMailer, donc j'ai ajouté à la fin:
ActionMailer::Base.smtp_settings = {
  :address  => 'smtp.truc.com',
  :port  => '25',
  :domain => 'www.truc.com'
}
Continuons la migration...
> rake test
...
> svn commit -m "updating to rails 2.0.2"
> rake rails:freeze:gems
...
> svn add vendor/rails
> rake deprecated
...
> ruby script/plugin remove deprecated
...
inutile maintenant
> svn commit -m "freezing rails 2.0.2"
> gem uninstall rails --version 1.2.6
A partir de là vous avez fait l'essentiel!! 
Vous pouvez rentrer chez vous après une dure journée de labeur... ou bien fignoler le travail
Créer un fichier migrate_views.rb à la racine de l'appli:
Ajouter:
Dir.glob('app/views/**/*.rhtml').each do |file|
  puts `svn mv #{file} #{file.gsub(/\.rhtml$/, '.html.erb')}`
end
> ruby migrate_views.rb
A         app\views\layouts\application.html.erb
D         app\views\layouts\application.rhtml
...
> rake test
...
> ruby script/server
...
Tester l'appli
Ajouter à production.rb
config.action_view.cache_template_loading            = true
Ajouter à test.rb
# Disable request forgery protection in test environment
config.action_controller.allow_forgery_protection    = false
Concernant routes.rb, je n'ai pas de solution miracle :(
Créer un une appli rails dummy à coté et utiliser un outil de conmparaison de fichier pour voir les différences et mettre votre routes.rb à jour.
Par exemple si vous n'utiliser pas le wsdl comme moi vous pouvez supprimer la ligne:
map.connect ':controller/service.wsdl', :action => 'wsdl'
On peut aussi copier/coller le README à la racine de l'appli dummy vers son appli rails
Dans test_helper.rb, on peut ajouter:
  # The only drawback to using transactional fixtures is when you actually 
  # need to test transactions.  Since your test is bracketed by a transaction,
  # any transactions started in your code will be automatically rolled back.
juste avant
self.use_transactional_fixtures = true
et
  # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
  #
  # Note: You'll currently still have to declare fixtures explicitly in integration tests
  # -- they do not yet inherit this setting
  fixtures :all
Si vous avez un script/breakpointer je pense que vous pouvez le supprimer...
Vous pouvez aussi changer tous vos fichiers dans db/migrate pour utiliser la nouvelle syntaxe des migrations (optionnel)
Il y a plein d'autre améliorations possibles dans les controller, dans les fixtures etc... cf: rails-2-0-it-s-done
Et Voilà ! Votre appli est migrée en Rails 2.0.2! Félicitations ;)