So, it’s now been a few months since I have found myself developing day to day with both ColdFusion from Adobe, and the Ruby on Rails framework. I’ve now delivered a few Rails projects to various people, and several hundred ColdFusion applications to people over the years.
I figured this would therefore put me in the position where I could give a side by side comparison of the two platforms, and their relative strengths and weaknesses. Note that the following does NOT include Railo, as I simply don’t understand the platform as throughly as ColdFusion, so I only comparing the Adobe product. I’m also not going into any great detail at all about any of the points – I’m simply giving food for thought:
- Rails is open source and free – ColdFusion is not.
- Both platforms can be installed and run on Java
- Only Rails can be installed and run on .NET, but both can talk to it.
- Both platforms can both quite happily talk to Java.
- Rails does not work well on Windows at all, ColdFusion works much better here.
- There is an equal number of choices in terms of deployment options, with regard to app servers and web servers, but the choices are different ones.
- Contrary to popular belief, both can scale.
- Ruby itself is a much more portable language that can be used to write things other than web applications.
- Ruby is a full blown OO language, with dynamic typing. ColdFusion is missing some OO elements.
- Development speed is comparable – but you get a working prototype much faster with Rails, and your resulting code will be more structured and maintainable.
- Rails is a single framework choice, but not a bad one.
- ColdFusion does give you more options as to how your app is structured and what frameworks you choose, but you have to choose, there is no default.
- There is no real ‘official’ anything with Rails, as there is no vendor
- Adobe will support their product, whereas it’s not clear who supports Rails other than the community
- Rails has a much faster release cycle
- There is (nearly) an official IDE for ColdFusion, and there are two or three unofficial ones for Rails that work in a variety of ways
- The development workflow with Rails is nicer, one reason being there is not a server as such required for development – it’s something you spin up from the app code itself.
- Rails has Rake, the rough equivalent of ANT or make, but it’s written in Ruby, meaning it’s very accessible. You don’t need to write (or learn) any Java.
- ORM wise, ActiveRecord is sweet, it’s blindingly simple and built in, whilst fairly clever. Transfer and Reactor are nice from the ColdFusion point of view, but they are working within the limitations of the language (no statics, etc)
- SOAP Web Services are a lot easier to publish and consume with ColdFusion (assuming there are no complex data types involved)
- REST Web Services are a lot easier to publish with Rails (consumption still undecided)
- AMF is native to ColdFusion and thus easier to implement. Rails can do with but only via a plugin.
- Exchange Integration is very easy with ColdFusion
- Email is equally easy in both platforms – although I suspect ColdFusion’s mail might scale better
- Image generation is very easy with ColdFusion, although it gets to a point where you need to get fruity with Java to do much more. Rails is unknown.
- PDF generation is much easier in ColdFusion that Rails, but this is changing.
- The communities are comparable. Both are very enthusiastic and accomodating, but there is much more of a open source software movement within Rails
So, this is by no means a complete and exhaustive list of all the pros and cons of either platform, but hopefully it does point out some of the pros of each platform. There are areas where ColdFusion clearly beats Rails, but others where there is the complete opposite.
The main thing that I can now see from using the two tools is that if you want to build an application quickly, aren’t fussy about architectural decisions, or strongly require open source, then Rails is for you, especially if what you are building is new. However, if you’re building an application that’s sitting in a corporate environment, providing a multitude of services integrating with legacy code, the ColdFusion is most probably your man.
As always, there is no correct tool for the job, there is no silver bullet. It’s all about choosing what is best for you.
Note: If you’re thinking of bringing up the Rails-is-a-framework-and-ColdFusion-isn’t argument – I’m not talking solely about ColdFusion on it’s own – but how you use it day to day. I realise ColdFusion is not a framework, but I do believe that, like Rails, it’s a tool.












Just out of curiosity, what does REST web service publishing entail? I always just thought of it as URL-based web services (much like actual site page calls), which would be equally easy in any language.
Can you expand on that one for a minute?
@Ben – You’re right, but Rails just does it neater, as the entire framework is predominantly RESTful. I’ve not consumed enough RESTful services from CF to be able to comment on that aspect, but it’s incredibly easy from Rails.
Good article I’ll just add that while Coldfusion is not free there are alternate cfml engines that are free and open source ie Railo and OpenBD.
You seem to use rails and ruby interchangeably, but I understand ruby to be a language, like cfml or what people usually consider ColdFusion, and rails is a framework which is not equivalent.
Interesting post though, when time permits I would like to play with some ruby. Wish you would break this out into a longer post though and explain the *why* for each point with some example code or something.
here is one I’m curious about: “Ruby is a full blown OO language, with dynamic typing. ColdFusion is missing some OO elements.”
What does ruby have that coldfusion is missing?
Seeing that this is #1 “Rails is open source and free – ColdFusion is not.” I think you should at least acknowledge there are open source alternatives and actually take a look at them. I think you’ll find yourself at least… slightly impressed.
And, considering that Monochrome and Railo have a “partnership” – I’m not sure why you didn’t acknowledge it.
@Todd – I noted before hand I would only be talking about Adobe ColdFusion – not the others. I am aware of the OS alternatives, which I have blogged about many times in the past on this very site.
@Jay – Overloading? Statics?
@Neil: Actually, strike that. I rewrote an comment entry 2-3 times and I finally just deleted what I was going to say. I think it’s going to sound like an attack no matter how I write it.
I think based on previous blog entries, you should consider looking into OpenBD or Railo. It seems like you haven’t been happy with Adobe CF’s implementation of CFML for some time now and I think you might find the other two a breathe of fresh air. Matt Woodword and crew have been putting a lot of time into Open BD, as Gert, Michael & team with Railo. They’re very approachable teams and open to new ideas and implementations. They both follow a core and then acknowledge vendor specific new ’stuff’.
This is a very nice comparison, fair and well balanced. Although I’m interested to hear more about how it’s easier to build rest services in Rails. In CF all you do is set access=remote on a CFC to create a REST-based service.We’ve got some plans to improve this in the future, but I’d be curious to get you opinions on what makes it so much nicer in Rails.
@Adam – As I said to said to Ben there’s nothing specific, it just seems easier. I think this is due to the fact that when you’re generating code, REST is built right in so it’s almost a non-event, it’s just there without you even having to think about it. To be honest, that single point is the closest to call between the two.
@Todd – Granted, however, I’ve not been ‘unhappy’ per se of ColdFusion, I am just a very critical person with my tooling, especially if it’s not OSS where I can’t directly change things.
I would look more at OpenBD, except I don’t agree with the licensing, and Railo, but I don’t beleive the results would be that different other than the pricing issue (and some missing interoperability stuff dotted around the place)
@Neil:
ColdFusion runs natively on Java. Saying that “ColdFusion can be installed and run on Java” is misleading.
Rails running on .NET has no point if Rails does not work well on Windows. It is more important that Ruby runs on .NET.
“Ruby itself is a much more portable language that can be used to write things other than web applications.”
Yes – CFML was designed to run inside the app server which ColdFusion is.
“Overloading? Statics?”
ColdFusion (or I should say CFML) supports “poor man’s overloading” in form of duck typing. There is no magic here, less work for the compiler. I really don’t see the point of method overloading in a dynamic language. Same with statics. No need for them in an web app, they can be easily replaced with singletons.
CFML supports all fundamental concepts of an OO language: http://en.wikipedia.org/wiki/Object_oriented#Fundamental_concepts
“Rails is a single framework choice, but not a bad one.”
True, but following “the Rails way” is not always a good idea. Sometimes you have to bend your idea to fit into “the Rails way”.
“There is (nearly) an official IDE for ColdFusion, and there are two or three unofficial ones for Rails that work in a variety of ways”
There is also unofficial CFEclipse, TextMate support and gedit support, some people still use HomeSite, DreamWeaver and even ColdFusion Studio.
“Rails has Rake, the rough equivalent of ANT or make, but it’s written in Ruby, meaning it’s very accessible. You don’t need to write (or learn) any Java.”
I don’t have much experience with ANT but AFAIR to write an ANT task I had to write XML not Java.
“ORM wise, ActiveRecord is sweet, it’s blindingly simple and built in, whilst fairly clever. Transfer and Reactor are nice from the ColdFusion point of view, but they are working within the limitations of the language (no statics, etc)”
It is official that CF9 is going to have Hibernate support, Railo is planning this as well. You can’t beat Hibernate. And to effectively work with an ORM you don’t need statics, etc. Take a look at Hibernate but use Java to do it. You’ll see how easy and powerful it is.
Good post anyway.
@Neil: Case in point (regarding OO), Railo is seeking feedback:
http://www.railo.ch/blog/index.cfm/2009/5/13/Modifiers-staticfinalabst ract
“Overloading? Statics?”
These language features have nothing to do with OO.
Overloading really doesn’t make sense in an untyped language because you cannot perform overload resolution in any meaningful way (and certainly not in a performant way!).
Static is a holdover from C – where it is a storage class on a variable that controls the lifecycle of that variable and it is a linkage specifier on a function that restricts visibility to a single compilation unit. C++ expanded those meanings somewhat but it was still about lifecycle and linkage.
You could argue that an OO language “needs” class variables/methods (in addition to instance variables/methods) but, whilst that may be a common feature, it certainly is not a defining feature and several OO languages address this in very different ways (look at Smalltalk and Dylan for example).
Other than that, a good, balanced comparison!
you should really have a look at what the cfwheels team is doing and then update this comparison. although people normally mistaken rails for a language when comparing it to coldfusion, it’s not. it would more correct to compare ruby to coldfusion and rails to cfwheels.
those points aside, an excellent article though.