Node.js 通过Heroku中的节点连接到Redis数据库
关于Heroku:应用程序是Nodejs、Express、WebSockets。。。 我正在一个小的免费Heroku实例上测试一个应用程序。 我通过OpenRedis和RedisToGo拥有自己的Redis数据库实例。 这些不是通过Heroku插件提供的,而是直接从提供者处提供的。 在本地运行时,我可以很好地连接到它们。我需要做什么特别的事情才能通过Heroku连接到他们? 我有点希望避免特殊的Heroku特定环境变量,但如果必要,我很乐意使用它们。 但我确实需要避免通过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
同样,我已经直接向相关提供者提供了我的数据库实例 在
NODE_ENV=production npm start
下,一切都可以在本地正常工作,这向我的应用程序表明,它应该连接到远程Redis实例(RedisToGo和/或OpenRedis),而不是本地Redis服务器
我使用Redis至少有三个目的:
- 会话存储::连接Redis::这在本地运行良好(应用程序服务器在本地运行,但连接到远程Redis实例),并且似乎在Heroku上也能工作——我已经检查过,刷新数据库,然后将稍微新的版本推送到Heroku,会话变量键被刷新
- Database::Node Redis::这在本地也可以正常工作(也是在本地运行但连接到数据库的远程Redis实例的应用服务器),但在Heroku上似乎不起作用
- WebSockets传输发布/订阅::我还没有对此进行彻底测试。我猜这是可行的,但对这个问题来说并不重要
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。