posted 4-Jun-2012 | 2 comments | , , , ,

The next runner up in my web development frameworks evaluation series is Ruby on Rails v3.

Unless you have been living under a bucket without an RJ45 port (yes, some buckets have Internet access), you have probably heard of Ruby on Rails (RoR), it’s a very popular framework with lots of momentum. RoR started as an extract of the Basecamp product at 37signals and is now used in all sorts of web apps.

I used RoR 3.2 on a Fedora 16 based workstation for this review. All the base documentation was taken from the official RoR site. Anyway, let’s get on with it.

Install the framework in a development workstation

Two basic steps and you are good to go:

  1. Install ruby and rubygems (using yum, apt-get or just download them from the RoR site)
  2. Install rails using gems (# gem install rails)

On a sidenote, I had to install a few dependencies I was missing (ie. sqlite-devel) that were not tagged as dependencies for either ruby or rubygem, but without them the rails command fails.

Setup a development environment using a free IDE, application server and database

You don’t really need much more than a good text editor for RoR, I’m using the Sublime Text 2 editor (which is very nice to use and has nicel Ruby coloring/autocomplete).

Develop the “Hello world” or similar sample outlined by the frameworks tutorial

To create my “Hello world” I followed the official getting started guide. I had a few minor issues getting my first app working, probably because of the noob component.

Following the steps outlined in the RoR homepage to get the first project working generated an error (that I needed a Javascript engine installed).

Using the link given by the error, I decided to install the therubyracer engine, which in turn failed to install because I didn’t have a C++ compatible compiler; so going back to dear old yum I installed the gcc-c++ package and the Javascript engine finally accepted my PC.

But this was not the end, the rails server command still failed, complaining that I didn’t have a Javascript engine (wasn’t this a developer friendly framework? :P). After a few web searches I found a post about this issue and voila! http://localhost:3000 rendered the start page for my sparkling new RoR app.

Going from the “vanilla” project to a “Hello RoR!” status was quite easy, just one command line to generate my first controller and view, edit the view file and set the new default route in the routes.rb file.

Note that there is an error in the tutorial if you use the latest Rails version, when you add the tags support to the Post model you need to add the :tags_attribute variable to the attr_accesible line or you will get a security error (apparently this was optional before, but now it’s mandatory).

Modify the sample app to perform a specific database query over a custom structure and display the results

Active Record, the default ORM library provided by Rails is quite powerful and easy to use. You can perform all the stuff you would expect using the provided Ruby API, and you can resort to your custom SQL commands if you want/need to.

Adding a custom SQL query to the tutorial sample was really easy, even more if the result maps to an already existing model entity.

Add a dependency to a third party library and perform a computation using it in our app

Using RugyGems as the backbone of the dependency management makes using third party libraries in Rails quite simple. The community is huge and very active, just out of curiosity I did a $ gem query –remote | wc -l and got almost 39.000 items listed.

Develop a “Hello world” REST service

The REST concept is core to Rails, so you don’t really need to do anything special to support the HTTP verbs. Formatting your output as JSON is also a built-in feature of the framework.

Anyway, developing a new REST based web service is just a matter of minutes.

Consume our own service from our app

You can use Active Resource to map RESTful resources to Rails models and then use them as any other model, it’s really cool :)

There are also other options, like straight HTTP fetching using the facilities Ruby provides or some specific gems like HTTParty.

Evaluation

Learning curve: GOOD

Learning RoR falls definetively on the easy side, if you already know Ruby and have a working knowledge of web development it’s a piece of cake. In my case, I had no clue about Ruby but found it similar enough to other languages I have worked with, so I felt right at home in a few hours.

Development performance for simple tasks: GOOD

If you consider all the work the generators do for you, add the thousands of Gems already available and finish it off with the really heavy use of convention over configuration that the framework promotes, you will agree that developing normal stuff is fast, and I mean Speedy Gonzales fast.

Development performance for complex/singular tasks: GOOD

Rails provides some help by not getting too much in the way when you want to develop something the framework doesn’t really foresees. So it basically falls to Ruby itself, and I found it complete enough to say you will probably manage to solve your business/domain specific problems with the same level of complexity and frustration you would find in most other broadly used languages/frameworks.

Dependency management: MEDIUM

The Gems and plugins support is good enough, it provides the things you need to keep your project under control and use external libraries. It does not provide all the features and customization tools like Maven do, but it probably fits most projects needs.

Code performance/security tuning capabilities: MEDIUM

I probably lack enough experience to pass judgment on this point, from my initial review and the apps I coded it seems RoR does a lot for you but it’s not that easy to get into it’s guts to fine tune it for security and performance, specially for mission critical and/or enterprise class applications. But I will probably review this statement after I deploy a few RoR apps myself in the real world with a considerable load.

Platform escalation/redundancy capabilities: MEDIUM

I will get a few insults for this, but being a scripted language that doesn’t run inside a controlled memory managed VM makes Ruby and therefore Rails an inferior contender for really big deployments compared to Java or .NET. I’m not saying you can’t deploy big RoR apps that serve thousands of users, I know there are real world examples of this, I just think that for the average IT crew it’s easier to control the scalation of a Java based app than a Rails one.

Acceptance in corporate markets: BAD

This is pure perception, but at least amongst my company’s customers Ruby isn’t even on the map. You tell them the next software you will provide will run under Ruby and the best thing you can expect to hear is “Whaaaat?”.

Complexity of developing and consuming SOAP and REST services: GOOD

Developing and consuming REST services under RoR is a piece of cake. Using SOAP requires a few more steps but it’s easy enough too.

TL;DR

Ruby on Rails v3 is easy to learn and use, provides amazing development speed of web based applications and has a large and active community behind it that will help anyone making his first steps solve most problems.

From our evaluation perspective the main drawback of RoR is the lack of acceptance in the corporate sector, even though Ruby and RoR are now known by most people in the web development world, they are not yet accepted as serious platforms for mission critical solutions in sectors like banking, telecommunications, and the like (at least on the south half of the world :)).

So if your boss is OK with it, or if you are developing an independant solution, I think RoR is an amazing option. And as time passes and more people use it, I’m sure it will become a serious contender for Java and .NET.

  • Nicolás Zuasti

    Im using RoR in as my freelance alternative, im my 8-5 job in a health centre i presented it as an alternative and only got a “meh, really?” reply. I think that big corporations have some issues with changes, but that’s not new. 

    Anyway, i’ve read the rails code (since you have it there on your hands the moment you installed it) and it’s simple enough to alter/tweak for any reason, i probably will never need to do it though. Using custom code/libraries you can add any particular functionality (setting it via initializers) for handling anything.

    From my experience, for a new project of your own is a great choice (top in my personal list atm), but you will have to work hard to sell it to any old customer that uses other platforms.

  • Kevin Sheppard

    I sort of disagree with this review. I remember actually reaching to tears trying to deploy a rails app to a remote production environment. To me it’s fine when you’re tinkering with it on your own, but getting it to a live production state was a total nightmare. At least it was a shock for me since I was coming from PHP and all I had to do was upload to a server via http://FTP. 

    With rails there’s this whole new layer of abstraction that I sometimes wish wasn’t there are just allowed me to simply open up a file and fix a problem or interface with SQL directly instead of having to meticulously migrate databases and whatnot. I understand the benefits of the abstraction and the concept of convention over configuration, but I did find that Rails, more often than not, forced me into doing things the Rails way and not in a way that made sense for me.

    It’s a great framework and the ORM is among one of the things that has me afraid to try out the Play Framework (ActiveRecord is so damn sexy) but my experience with it over the past few months has me curious about what my old friend Java’s been up to while I’ve been away.