【问题标题】:Node & Redis Application Error on HerokuHeroku 上的节点和 Redis 应用程序错误
【发布时间】:2015-06-17 10:15:27
【问题描述】:

我是 Heroku 和 Node 的新手,所以请多多包涵。我将我的工作聊天应用程序(在本地主机上)部署到 Heroku,但无法打开 Heroku 应用程序。

谁能帮我解决这个问题?

我在 stackoverflow 上查看了一些类似的问题,并做了 heroku config:add REDISCLOUD_URL='redis_cloud_url'heroku config:add NODE_ENV='production',但这些都不起作用。


这是我的heroku日志。

2015-04-11T19:42:35.568690+00:00 heroku[api]: Deploy 0244dd7 by MYMAIL@gmail.com
2015-04-11T19:42:38.004491+00:00 heroku[web.1]: Starting process with command `node app.js`
2015-04-11T19:42:39.182617+00:00 app[web.1]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
2015-04-11T19:42:39.182639+00:00 app[web.1]: Recommending WEB_CONCURRENCY=1
2015-04-11T19:42:39.793252+00:00 app[web.1]: events.js:85
2015-04-11T19:42:39.793258+00:00 app[web.1]:       throw er; // Unhandled 'error' event
2015-04-11T19:42:39.793260+00:00 app[web.1]:             ^
2015-04-11T19:42:39.793262+00:00 app[web.1]: Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED
2015-04-11T19:42:39.793264+00:00 app[web.1]:     at RedisClient.on_error (/app/node_modules/redis/index.js:196:24)
2015-04-11T19:42:39.793266+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/redis/index.js:106:14)
2015-04-11T19:42:39.793268+00:00 app[web.1]:     at Socket.emit (events.js:107:17)
2015-04-11T19:42:39.793270+00:00 app[web.1]:     at net.js:459:14
2015-04-11T19:42:39.793271+00:00 app[web.1]:     at process._tickCallback (node.js:355:11)
2015-04-11T19:42:40.546881+00:00 heroku[web.1]: State changed from starting to crashed

【问题讨论】:

  • 你确定你的redis进程在localhost上运行吗? Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 会另外指明。
  • 我通过在终端中执行 redis-server 来启动服务器,并且能够使用 redis-cli 终端中的数据。

标签: node.js heroku redis


【解决方案1】:

好的,我知道问题所在,问题是您使用的是 redis 云,所以 redis 没有127.0.0.1

上运行

在 Heroku 上查看 the official documentation;您不能将 REDISCLOUD_URL 设置为 redis_cloud_url,您必须让 Heroku 将其设置为您的帐户的 REDISCLOUD_URL,您可以通过在终端中执行此操作来获得

heroku config:get REDISCLOUD_URL

它应该返回类似这样的东西;

http://rediscloud:password@hostname:port

如果它返回的内容没有这种格式,则说明插件没有为您的应用正确配置/激活。

您连接到 redis 的代码应如下所示:

var redis = require('redis');
var url = require('url');
var redisURL = url.parse(process.env.REDISCLOUD_URL);
var client = redis.createClient(redisURL.port, redisURL.hostname, {no_ready_check: true});
client.auth(redisURL.auth.split(":")[1]);

【讨论】:

  • 另外,不要忘记将 Redis Cloud 插件实际添加到您的 Heroku 应用程序中;)
  • 好的。我确实按照说明进行操作,但仍然有错误。我认为 redis 部分现在很好,但是 Socket IO 导致了一个问题。错误:找不到模块“socket.io-redis”
  • 解决了 server.listen(process.env.PORT || 3000) 的 Socket IO 问题;
  • 感谢 Tristan Foureur 和 Itamar Haber 帮助我解决 Redis 问题!
【解决方案2】:

我使用 Heroku Redis,而不是 Redis To Go,也遇到了这样的问题。但是我通过改变 Redis 客户端的初始化方式解决了这个问题,之前我有以下代码:

const
  redisOptions = require('./redisOptions'),
  redis = require('redis'),
  redisClient = redis.createClient(redisOptions);

现在我从 redisOptions 中删除了 url 参数,然后将其添加到 createClient 方法中,即:

const
  redisOptions = require('./redisOptions'),
  redis = require('redis'),
  redisClient = redis.createClient(REDIS_URL, redisOptions);

然后错误已修复。真的不知道为什么它在我的本地环境中没有问题,但我需要在 Heroku 上进行此修复。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2015-09-23
  • 2018-10-04
  • 1970-01-01
  • 2018-09-03
  • 2019-01-12
  • 1970-01-01
相关资源
最近更新 更多