Insights and outlooks on software development


On upgrading Rails from 2.3.5 to Rails 3 (via 2.3.8)

Friday, January 21, 2011 by Thomas L

I run a rather small and basic, but functional, web site for me and some friends on Rails. The site has been running on Rails 2.3.5 for a rather lengthy period, but a couple of weeks ago I decided to enter the new era of Rails 3. This is what I had to do in order to get things working.

While still remaining on Rails 2.3.5, I changed the project to use Bundler and made sure all of my tests ran well, and added a few extra ones.

I then upgraded to Rails 2.3.8. The upgrade was rather smooth, I didn't get any incompatibilities there, so I made sure everything worked, and then jumped on to the real upgrade, to Rails 3.

In Rails 3, I had trouble with the will_paginate gem (solved by upgrading the gem to version 3.0.pre2). I also had problems with Authlogic saying: "undefined method `to_key' for #". I solved this by using the form_for helper change mentioned here.

Since there are quite a few changes between Rails 2.3 and Rails 3, e.g. the new application.rb, I got help from the plugin rails-upgrade (instructions).

In controllers, old root redirects didn't work, i.e.

redirect_to root_url

To solve this, I had to define a named route in routes.rb like so:

match '/' => 'posts#index', :as => :root

Then I can use redirect_to like so:

redirect_to :root

Rails 3 has removed the markdown view helper method, so I had to use the formatize gem to get this working.

From Rails 3 onwards, all of the stuff output in the views are html escaped. Make sure that you stop escaping the user-generated things, and, more importantly, un-escaping the outputs in the views that should contain regular HTML.

Happy upgrade!

Filed under , , having  

3 kommentarer:

Katie said...

Can you tell me how to upgrade to Rails 3 on the server without impacting the older 2.3.5 apps I have? I will leave them in the old version, but develop new apps in 3...

Thomas L said...

I guess I'd go about it by installing a parallel version of ruby with its own GEM_HOME. If you're running several apps on a shared server, I'd say it's a good practice to use separate GEM_HOME's for different apps. Otherwise you might get gem dependency clashes.

For me, it's rather simple as I only deploy virtual AWS servers or Heroku. :)

Good luck!

Anonymous said...

Evolution are at the very high of their recreation, and the developer’s stay studio productions showcase their knack for bringing in style recreation codecs into the digital realm with aptitude. With a super-fast sign-up process and rapid deposits, we’ll have you ever arrange in no time. New German regulations require account verification to proceed playing in} at Caxino. Please enter the cellphone quantity which is registered on your 카지노사이트 Caxino account and we will ship a confirmation code to alter your password. Horse races are deeply covered as nicely, and you’ll get to position bets on thoroughbreds, harness, and even greyhounds.