redis crash on heroku with node.js

heroku, node.js, redis

Solution

Well, this was a clear case of RTFM and not sleeping on it before posting.

I saw on another SO post that I could attach an error handler to the redis client via:

redis.on "error", (err) ->
   console.log("Redis error: #{err}")

This yielded

Redis error: Auth error: Error: Error: ERR max number of clients reached

in the logs, which was happening because was opening a new connection on each request and not closing it. I then moved my connection instantiation to the server.js file and then passed it into my route handlers as a parameter. Now the app runs fine with just one active connection...

Hopefully this will help future people who have made a similar mistake...

Problem

I have a very simple app running on heroku with nodejs and redis. It takes data posted to it periodically via an ajax post, and stores the data in a list in Redis. I've run the app locally without issue, where it logs the data sent to it to redis without complaint. However, when I run it on heroku I get about 5-10 requests into it before it crashes, with a pretty non-specific redis error. Dependencies: ``` "redis": "~0.7.1", "hiredis": "~0.1.14", "redis-url": "~0.1.0" ``` Code writing to redis (coffeescript): ``` app.post '/track', (req, res) -> redis = require('redis-url').connect(app.settings.redis_url) if(req.body.userid) key = "locations:#{req.body.userid}" redis.rpush key, JSON.stringify({time: (new Date()).toString(), lat: req.body.latitude, lon: req.body.longitude}) ``` The error I am getting is as follows: ``` Error: Uncaught, unspecified 'error' event. 2012-04-21T06:12:00+00:00 app[web.1]: at Command.callback (/app/node_modules/redis/index.js:159:29) 2012-04-21T06:12:00+00:00 app[web.1]: at HiredisReplyParser.<anonymous> (/app/node_modules/redis/index.js:256:14) 2012-04-21T06:12:00+00:00 app[web.1]: at RedisClient.return_error (/app/node_modules/redis/index.js:446:25) 2012-04-21T06:12:00+00:00 app[web.1]: at HiredisReplyParser.execute (/app/node_modules/redis/lib/parser/hiredis.js:41:18) 2012-04-21T06:12:00+00:00 app[web.1]: at HiredisReplyParser.emit (events.js:67:17) 2012-04-21T06:12:00+00:00 app[web.1]: at RedisClient.on_data (/app/node_modules/redis/index.js:422:27) 2012-04-21T06:12:00+00:00 app[web.1]: at Socket.emit (events.js:67:17) 2012-04-21T06:12:00+00:00 app[web.1]: at Socket.<anonymous> (/app/node_modules/redis/index.js:66:14) 2012-04-21T06:12:00+00:00 app[web.1]: at TCP.onread (net.js:367:14) ``` This crashes the app, which heroku brings back eventually, but it then crashes again pretty quickly, within a few requests. Anyone run into this before? I'm pretty new to node/redis, so this is probably something obvious. It's just odd that it runs happily pretty much forever locally, but is dying like this on heroku... Thanks!

Original source