After two years of development Rails 3.0 is with us and it's not a release candidate - it's the real thing.
Rails 3.0 is the result of a merger between two previously competing teams - Rails and Merb. The Merb was a project started as a way of demonstrating how Rails architecture could be improved. When the project looked as if it was about to overtake Rails the two projects agreed to merge but with Rails taking the limelight. Rails 3.0 is the result of Rails 2.0 absorbing much of the architecture introduced by Merb.
What it interesting is that even after 3 years of working together with "some tension" there is still some bad feeling about the loss of the Merb name.
In a recent post to Hacker News Ezra Zygmuntowicz (ezmobius) one of the leading Merb designers commented on the content of the offical release blog:
But not a single mention of merb in this entire post . I'm not complaining but it seems disingenuous not to mention it as the sole reason I wrote merb was to push rails forward. And when it looked like merb might possibly overtake rails I went ahead and gave merb to the rails project and got the two teams together so there wasn't wasted effort....
So I'm incredibly happy to see rails 3 finally come out. And I'm incredibly happy that my little experiment in making rails architecture better has paid off and the two projects merged. But I do think it's a bit weak that merb was not mentioned once in the article.
Even so the results of merging the two teams has been remarkable in the sense that people work on open source projects because of what they believe in - and this is an example of two teams coming together to take up a single goal.
As already mentioned in a previous news item Rails 3.0 Release Candidate a key improvement is speed. Rails 3.0 is claimed to be faster as well as better.
The important thing about Rails 3.0 from the developer's point of view is that it introduces new ways of doing things and obsoletes old ways of doing things. This is a radical change and not a decimal point upgrade.
The key new features are outlined in the the official blog
New Active Record query engine
Active Record has adopted the ARel query engine to make scopes and queries more consistent and composable. This makes it easier to build complex queries over several iterations.The execution of the query is also delayed until needed.
New router for Action Controller
The REST approach to routing in controllers which was introduced in Rails 2 has been revamped in Rails 3 to be more RESTful and flexible.
New Action Mailer
Action Mailer has long been criticised for being half model, half controller. In Rails 3, it has been worked ove to become all controller and more similar to Action Controller
Manage dependencies with Bundler
Bundler cleans all the difficulties with managing dependencies and allows you to specify the libraries, frameworks, and plugins that your application depends on.
Active Model: Validations, callbacks, etc for all models
To make it easier to work with alternative database technologies e.g. Object Relational, many Active Record components have been moved into the new Active Model framework.This creates and API that can be used by alternative database providers like DataMapper, Sequel, or Mongoid to be used.
The internals of Rails have been rewritten to make it cleaner and more logical and, refreshingly for an open source project, the documentation has been improved!
Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+.
You can download the release candidate from http://rubyonrails.org/