Grails vs. Rails - My Thoughts
In a comment, Jared Peterson asked:
I'm curious if you have any thoughts on folks that might be trying to make a decision between Rails and Grails. I like the concept of "Allow Both", but what if you "have neither"?
If you were starting a new project, could choose either one, needed to interact with a lot of existing Java code (JRuby on Rails I guess), what would you pick?
A friend recently asked me "Can I solicit your honest, unadulterated opinion on Grails?" I think the e-mail I sent him may help Jared's question.
I think it's awesome. IMO, it's the same thing as AppFuse, but it has
a DSL that's much simpler to learn and remember. Less code -> faster
productivity. There does seem to be some maturity issues, but I think
it'll get there. The question is - how fast can Groovy become. It's
similar to Rails and Ruby in that you start using Grails and you
think "This Groovy thing is kinda cool, I'd like to learn more." One
of the reasons I really like it is the learning curve for experienced
open source Java Developers is virtually flat. You can learn enough
to be productive in a single day.
That being said, I think there's also a lot of cool stuff going on
with RIA. IMO, Flex or GWT + Grails would be a really fun set of
tools to develop with. Here's a excerpt from a write-up I recently
did when analyzing Rails and Grails at LinkedIn (in January):
--------
Comparing Rails and Grails
They're both excellent frameworks. Rails is definitely more mature,
but the environment is a pain to setup (esp. on Windows). Grails is
very easy to setup for Java Developers. Grails needs a lot of
improvement as far as hot deploy and stack traces. It's probably
Groovy's fault, but its stack traces are hideous - rarely pointing to
the class and line number in the first few lines.
As for hot deploy, it doesn't work nearly as well as it does with
Rails. Rails' "script/server" starts WEBrick in a few seconds, while
"grails run-app" can take up to 10 seconds (even on a brand new
application). Even with its warts, Grails is simply awesome. I
really, really enjoy writing Groovy code in IDEA and seeing immediate
changes. I don't like "test-app" as much as I like Rails'
"test:units" (or even better, "test:uncommitted"). It seems to be
widely realized that Rails has a better testing story.
Rails is immediate, Grails is immediate 70% of the time.
Groovy is extremely easy to learn for Java Developers. Ruby is easy
too learn, and possibly too powerful for OO rookies. Both are fun to
program in and very capable of allowing greater developer
productivity. If you know Hibernate, Spring, SiteMesh and JSP, you
owe it to yourself to look at Grails. If you know these technologies
well, you can learn Grails in less than an hour. You can be
productive in the next hour and have an application running by the
end of the day. That's not to take anything away from Ruby. I believe
that Rails is an excellent platform as well. It's pretty cool that
profiling and benchmarking are built into the framework and you can
easily judge how many servers you'll need to scale.
I used IDEA while developing with both frameworks. IDEA has Rails and
Groovy support available via plugins and they both worked quite well.
The support for Grails was much better than Rails. Grails offers code
completion, Ctrl+click on classes/methods, debugging and starting/
stopping the webapp from your IDE. Rails doesn't offer much in the
way of Ctrl+clicking on class names/methods or debugging.
--------
Is there anything that Rails can do that Grails can't? Not as far as I can tell. I think it really comes down to developer passion and team preference. If you have experienced Java Developers that like the ecosystem and its tools, Grails makes a lot of sense. If you have experienced PHP developers or frustrated J2EE developers, they might enjoy Rails more. One thing that's very cool about both frameworks - learning one actually teaches you things about the other. They're so similar in many respects that knowledge is transferable between the two.
Of course, this is all just my opinion after working with both frameworks for a few weeks. For anyone who has tried both, what do you think?
In closing, here's an excerpt from a recent comment I left on Javalobby:
Of course, the hard part now is deciding between Django, Rails, Grails and GWT for your web framework. Then again, that's like having to choose between a Ferrari, Porsche, Lamborghini and a Maserati. No matter which one you choose, it's unlikely you'll be disappointed.