Upgraded ShoutSMS from Rails 2.3.8 to Rails 3 in five minutes Aug 16, 2010
Today I wanted to try how easy it would be to upgrade our existing ShoutSMS (pretty small) Rails application from 2.3.8 to latest Rails 3 release candidate (currently rc3). Without taking our test suite into consideration it took around five minutes with help from the official rails_upgrade[1] plugin. This is fast, yes, but considering the size of this app and possible pitfalls I am not looking forward to upgrade our larger projects.
These are the basic steps to perform
- Install rails_upgrade in my 2.3.8 project using “./script/plugin install http://github.com/rails/rails_upgrade”
- Run rake tasks installed with plugin to check what steps are required with
rake rails:upgrade:check
- Run
rake rails:upgrade:backup
to backup some files which will be override shortly - Run
rake rails:upgrade:configuration >> upgrade_configuration
- Run
rake rails:upgrade:gems >> upgrade_gems
- Run
rake rails:upgrade:routes >> upgrade_routes
- Create new Rails 3 app above your existing one with
rails n .
- Check each of your files before overriding - not all are backed up with the backup task
- Copy back in your changes and refer to the three “upgrade_*” files for updated configuration, gems and routes syntax
This did most of the work for me. I needed to patch a bit in my new “application.rb” file (e.g. replace RAILS_ROOT with Rails.root, RAILS_ENV with Rails.env, etc).
Notice, the rails_upgrade plugin might suggest to change “<% @object.each do |p| %>
” blocks to “<%= @object.each do |p| %>
” but I don’t see this should be done.
I needed to upgrade ActiveMerchant but it was a simple
$ gem update activemerchant
and then patch my Gemfile with correct version
gem 'activemerchant', '1.7.1', :require => 'active_merchant'
It was also needed to go through each ERb and update block helpers. Rake task “rake rails:upgrade:check” can be used multiple times to check if you’re near the end.
I had a couple of “f.error_messages” warnings as well. It’s suggested to install “rails plugin install git://github.com/rails/dynamic_form.git” but I made a partial instead to have complete control over my displayed error messages.
For more general upgrade tips & tricks you might consider viewing part 1, part 2 and part 3 of the “Upgrading to Rails 3” Railscasts series.