我有一個非常簡單的應用程序,運行在heroku上,並且使用了nodejs和redis。它通過ajax帖子定期發佈數據,並將數據存儲在Redis的列表中。redis在heroku上發生故障,使用node.js
我已經沒有問題,它記錄發送給它無怨無悔的Redis的數據在本地運行的應用程序。然而,當我在heroku上運行它時,我會在它崩潰之前得到大約5-10個請求,帶有非特定的redis錯誤。
依賴關係:
"redis": "~0.7.1",
"hiredis": "~0.1.14",
"redis-url": "~0.1.0"
代碼寫的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})
我得到的錯誤如下:
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)
這個崩潰的應用程序,這heroku最終帶回來,但它在幾個請求之內很快就崩潰了。
之前的任何人進入這個運行?我對node/redis很新,所以這可能是很明顯的。這只是奇怪的是,它運行愉快地幾乎永遠在本地,但垂死這樣在Heroku ...
謝謝!
是不是因爲Redis的一個連接在每個POST事件成立?該應用程序不應該這樣做。 Heroku Redis實例允許多少個連接? – 2012-04-21 06:38:58
你是對的,迪迪埃。我剛剛發現我已經沒有客戶了。我將把連接移動到server.js中,以便在應用程序範圍內而不是在發佈請求期間打開。我現在通過每次關閉連接來修復它,但顯然要重新使用整個應用程序的一個連接好得多。謝謝! – stockli 2012-04-21 06:43:19