Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点&;Heroku上的Redis应用程序错误_Node.js_Heroku_Redis - Fatal编程技术网

Node.js 节点&;Heroku上的Redis应用程序错误

Node.js 节点&;Heroku上的Redis应用程序错误,node.js,heroku,redis,Node.js,Heroku,Redis,我是Heroku&Node的新手,请耐心等待。我将我的工作聊天应用程序(在本地主机上)部署到Heroku,但无法打开Heroku应用程序 有人能帮我解决这个问题吗 我看了一些关于stackoverflow的类似问题,并做了heroku配置:添加REDISCLOUD\u URL='redis\u cloud\u URL'和heroku配置:添加节点\u ENV='production',但这些都不起作用 这是我的heroku日志 2015-04-11T19:42:35.568690+00:00

我是Heroku&Node的新手,请耐心等待。我将我的工作聊天应用程序(在本地主机上)部署到Heroku,但无法打开Heroku应用程序

有人能帮我解决这个问题吗

我看了一些关于stackoverflow的类似问题,并做了
heroku配置:添加REDISCLOUD\u URL='redis\u cloud\u URL'
heroku配置:添加节点\u 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
2015-04-11T19:42:35.568690+00:00 heroku[api]:部署0244dd7MYMAIL@gmail.com
2015-04-11T19:42:38.004491+00:00Heroku[web.1]:使用命令'node app.js启动进程`
2015-04-11T19:42:39.182617+00:00应用程序[web.1]:检测到512 MB可用内存,每个进程的内存限制为512 MB(web_内存)
2015-04-11T19:42:39.182639+00:00应用程序[web.1]:推荐web\u并发=1
2015-04-11T19:42:39.793252+00:00应用程序[网站1]:events.js:85
2015-04-11T19:42:39.793258+00:00应用程序[网站1]:投掷者;//未处理的“错误”事件
2015-04-11T19:42:39.793260+00:00应用程序[网站1]:^
2015-04-11T19:42:39.793262+00:00应用程序[web.1]:错误:Redis连接到127.0.0.1:6379失败-连接失败
2015-04-11T19:42:39.793264+00:00应用程序[web.1]:在RedisClient.on_错误(/app/node_modules/redis/index.js:196:24)
2015-04-11T19:42:39.793266+00:00应用程序[web.1]:at插座。(/app/node_modules/redis/index.js:106:14)
2015-04-11T19:42:39.793268+00:00应用程序[web.1]:位于Socket.emit(events.js:107:17)
2015-04-11T19:42:39.793270+00:00应用程序[网站1]:在net.js:459:14
2015-04-11T19:42:39.793271+00:00应用程序[web.1]:在进程中调用(node.js:355:11)
2015-04-11T19:42:40.546881+00:00 heroku[web.1]:状态从开始更改为崩溃

好的,我知道问题是,实际上,问题是您使用的是redis云,所以redis不是运行在
127.0.0.1

看看Heroku;您不能将REDISCLOUD\u URL设置为
REDISCLOUD\u URL
,您必须让Heroku将其设置为您的帐户的REDISCLOUD\u 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]);

我用Heroku Redis,而不是Redis去,也有这样的问题。然而,我通过改变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上进行此修复。

您确定您的redis进程正在本地主机上运行吗<代码>错误:Redis连接到127.0.0.1:6379失败-connect EconRefused将指示其他情况。我通过在终端中执行Redis server来启动服务器,并能够在Redis cli终端中播放数据。此外,不要忘了将Redis Cloud附加组件实际添加到Heroku应用程序中;)好啊我确实按照指示做了,但仍然有一个错误。我认为redis部分现在很好,但Socket IO引起了一个问题。错误:找不到模块“socket.io-redis”解决了服务器的套接字io问题。侦听(process.env.PORT | | 3000);感谢Tristan Foureur和Itamar Haber帮助我解决Redis问题!我只是好奇,你的
redisOptions
文件里有什么?@RizaKhan你可以有不同的选择。