We love Rails at Dwellable. We didn't participate in the Rails Rumble this year, but we had great fun flipping through the contestants. The winners were announced on Friday and we found ourselves increasingly obsessed with a single, burning question...
We contacted the ten winners and asked if we could have a peek at their Gemfiles. Each team generously agreed - thanks guys! Read on for our analysis.
The basic Rails stack:
Five teams used MySQL, three used Mongo, and two used Postgres. Looks like Mongo usage continues to grow despite occasional consternation on Hacker News. Strangely, each team used a different Mongo ORM. Also, one mildly schizophrenic team used Ohm (a Redis ORM) in addition to Mongo.
Five teams used Redis. The rest are ignoring the march of progress.
Six teams used RSpec. The teams that used RSpec also employed several other testing-related gems, but there wasn't much overlap.
The other teams had no testing gems whatsoever. Does that mean no testing, or did they simply use minitest? You be the judge.
Resque used to be the gem of choice for background jobs, but appears to be waning. Only one team used resque. Four teams used Sidekiq, which is compatible with resque but uses multiple threads to scale. One team used Delayed Job.
Sadly, no one picked the underrated Beanstalk.
Seven teams used Capistrano and one used Mina. Vlad failed to make an appearance. You don't really have to put Capistrano in your Gemfile, though. Perhaps they all secretly used it.
Four teams used Foreman. Three used Quiet Assets, which works around rails bug #2639, possibly the most +1'd bug in Rails history.
Two teams used Dalli to talk to memcache. Kudos to them for caring about performance. No one else seemed to use memcache. I guess the other teams didn't use memcache or relied on Redis instead.
A variety of third-party services were used by the teams, with very little overlap. Three teams used Pusher, a hosted WebSockets helper service. I haven't heard of it before and it looks neat. Two teams used the MailChimp API (not straight SMTP).
Note to self: don't create a startup to handle 500 errors.
Two teams used New Relic in addition to an exception handler.
Devise continues to win hearts and minds, though some teams were able to get by with plain old OmniAuth:
In general I believe that the embryonic Node.js platform envies the Ruby gems ecosystem. But if you look carefully you can see Node starting to encroach. For example, six of the teams used The Ruby Racer. What about the others? I'm guessing that their ExecJS used Node.
Also, one team used Stylus (a wrapper around the stylus npm package) instead of Sass. I have no idea why.
From the Hpricot page six months ago - "After years of lack of a proper maintainer ... it has been decided to finally close the book on hpricot." Three teams never got the memo:
Finally, I'd like to give a shout out to some great gems that I found while poking through the Gemfiles. Some of these were entirely new to me. Perhaps you'll find them useful too:
user_agent.mobile? and several other slightly less useful features.%m is minutes or months.The Rails Rumble Gem Teardown was quite enlightening. It was gratifiying to see that most of the teams used a stack similar to ours here at Dwellable. I also discovered a bunch of new gems (Sidekiq, Letter Opener, etc.) to check out, and at least one 3rd party service that looks useful (Pusher).
I want to thank the winning teams for allowing me to poke through their Gemfiles. Check out the sites to see what you can do with these gems: