Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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:应用程序是Nodejs、Express、WebSockets。。。 我正在一个小的免费Heroku实例上测试一个应用程序。 我通过OpenRedis和RedisToGo拥有自己的Redis数据库实例。 这些不是通过Heroku插件提供的,而是直接从提供者处提供的。 在本地运行时,我可以很好地连接到它们。我需要做什么特别的事情才能通过Heroku连接到他们? 我有点希望避免特殊的Heroku特定环境变量,但如果必要,我很乐意使用它们。 但我确实需要避免通过Heroku提供Redi

关于Heroku:应用程序是Nodejs、Express、WebSockets。。。 我正在一个小的免费Heroku实例上测试一个应用程序。 我通过OpenRedis和RedisToGo拥有自己的Redis数据库实例。 这些不是通过Heroku插件提供的,而是直接从提供者处提供的。 在本地运行时,我可以很好地连接到它们。我需要做什么特别的事情才能通过Heroku连接到他们? 我有点希望避免特殊的Heroku特定环境变量,但如果必要,我很乐意使用它们。 但我确实需要避免通过Heroku提供Redis插件的必要性。
同样,我已经直接向相关提供者提供了我的数据库实例

NODE_ENV=production npm start
下,一切都可以在本地正常工作,这向我的应用程序表明,它应该连接到远程Redis实例(RedisToGo和/或OpenRedis),而不是本地Redis服务器

我使用Redis至少有三个目的:

  • 会话存储::连接Redis::这在本地运行良好(应用程序服务器在本地运行,但连接到远程Redis实例),并且似乎在Heroku上也能工作——我已经检查过,刷新数据库,然后将稍微新的版本推送到Heroku,会话变量键被刷新

  • Database::Node Redis::这在本地也可以正常工作(也是在本地运行但连接到数据库的远程Redis实例的应用服务器),但在Heroku上似乎不起作用

  • WebSockets传输发布/订阅::我还没有对此进行彻底测试。我猜这是可行的,但对这个问题来说并不重要

我最感兴趣的是, Heroku实例可以通过connect Redis客户端连接到Redis实例,但不能通过数据库客户端连接到同一个Redis实例。而我的本地运行版本能够通过这两个客户端连接到同一个(远程)实例。(我已经通过终端客户端验证了这些发现,使用
flushall
命令,并等待密钥刷新。)

如有任何见解,将不胜感激


我将通过下面的评论发布我的编辑和更新,因为它们带有时间戳。事实证明,我们无法通过Heroku的“正常”方式连接到数据库(不确定原因,因为我不知道Heroku通过AWS配置的内部结构);我们需要使用
heroku config:set
命令设置环境变量。OpenRedis提供了一个终端就绪字符串,可能可以为自配置的RedisToGo实例放一些类似的东西,尽管我还没有这样做。

是的,我的env开关是个坏消息,因为Heroku没有自动将NODE_env设置为生产。不管怎样,我现在通过Heroku获得了数据库初始化;尽管仍然没有通过WebSocket获得查询的响应。更多的调试…现在似乎得到了响应,但延迟相当可怕。有些离题:为什么要为实例使用不同的Redis提供程序?这是为了HA吗?我想测试尽可能多的测试,以比较性能并隔离问题和错误。举例说明:一周前,我只在Nodejitsu部署了我的应用程序,但它以惊人的方式失败了,而它在本地运行良好。他们的支持部门敦促我深入研究我的代码以找到bug。首先,我部署到Heroku的唯一原因是(首先对我自己)证明错误不在我的代码中。Heroku不是这个应用的长期解决方案,因为它构思会话和状态的方式与我使用的协议不兼容。可能存在混杂因素,但我注意到Rtg和OpenRedis的延迟更好(更少),而IrisRedis在这一点上功能失调。在Linode上,我可以在同一个虚拟机上运行Redis实例,这样应该非常快。我们保留Rtg(微型)用于备份、诊断和c。