Heroku, MongoDB, node.js – a problem
A couple facts about three cool technologies
- Heroku is the simplest way to deploy web apps. Originally designed for Ruby, it gained node.js support last spring/summer. There are alternatives, but heroku presents itself as a particularly good pick for various reasons (it feels right)
Combining these three technologies should be a walk in the park. The best thing since sliced bread and unicorn farts should rain down the heavens upon you for even thinking of using node.js, mongo and heroku in unison.
Not so much.
The culprit – the bleeding edge, baby!
Mongo’s only been widely-ish popular for a year, node.js still isn’t widely and Heroku is traditionally a RoR hosting environment so there are things that aren’t quite smooth yet.
Getting mongoDB support on Heroku means using an external party – what heroku calls an add-on – MongoHQ. It’s a mongoDB hosting provider that gives you access to a database and lets you loose.
But MongoHQ requires authentication.
My favourite mongoDB driver for node.js … doesn’t support authentication. At least it doesn’t support authentication easily, in fact it doesn’t support authentication so much that it isn’t officially documented. The only reference to getting this working is some guy’s blogpost from April 2011. This is an actively developed library by the way, the last commit to node-mongodb-native‘s github was yesterday.
Some say I should be using mongoose instead, but that would most likely require rewriting the whole application at this point. Not to mention I don’t like mongoose’s ORM-like approach because that’s just a little too SQL for my liking. Why would you force a traditional data store way of doing things onto something as refreshing as Mongo?
To make things worse, a while ago (about a year it seems), mongo introduced a new mongo:// url schema for connecting to their database … not even all the official drivers support it yet.
Don’t you just love the bleeding edge? Competing libraries, standards shifting under your feet and things never quite working out!