node.js - 使用 node.js 的 heroku 上的 redis 崩溃

标签 node.js heroku redis

我有一个使用 nodejs 和 redis 在 heroku 上运行的非常简单的应用程序。它通过 ajax post 定期获取发布到它的数据,并将数据存储在 Redis 中的列表中。

我已经在本地毫无问题地运行该应用程序,它将发送给它的数据毫无怨言地记录到 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 上却像这样死去......

谢谢!

最佳答案

好吧,这是一个明显的 RTFM 案例,在发布之前没有睡过头。

我在另一个 SO 帖子上看到我可以通过以下方式将错误处理程序附加到 redis 客户端:

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

这产生了

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

在日志中,这是因为在每个请求上打开一个新连接而不是关闭它。然后我将我的连接实例移到 server.js 文件中,然后将它作为参数传递到我的路由处理程序中。现在,该应用程序只需一个事件连接即可​​正常运行...

希望这对以后犯过类似错误的人有所帮助...

关于node.js - 使用 node.js 的 heroku 上的 redis 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256779/

相关文章:

javascript - 尝试从文件读取数据时,readFileSync 返回未定义

ruby-on-rails - 从 Rails 应用程序发送短信

ruby - Heroku Ruby NoMethodError string.capitalize

node.js - 无法使用 Node.js 在 heroku 上创建 postgresql 表

php - Redis "unknown command"错误

javascript - 是否可以从node.js中的异步函数返回值?

javascript - Heroku 在 heroku (Node.js) 上找不到本地模块

javascript - 处理从 javascript 到 MySQL 到 javascript 到 MS SQL 到 javascript 的时区

nosql - redis 服务器没有启动

node.js - 如何在 Windows 机器上安装和运行 redis-server(具体为 10 个)?