【发布时间】:2014-02-16 20:06:24
【问题描述】:
关于 Heroku:App 是 Nodejs、Express、WebSockets ...
我正在一个小的免费 Heroku 实例上测试一个应用程序。
我通过 OpenRedis 和 RedisToGo 拥有自己的 Redis 数据库实例。
这些不是通过 Heroku 插件提供的,而是直接从提供者那里提供的。
在本地运行时,我可以很好地连接到它们。我需要做些什么才能通过 Heroku 连接到他们?
我有点希望避免特殊的 Heroku 特定环境变量,但如果有必要,我很乐意使用它们。
但我绝对需要避免通过 Heroku 配置 Redis 插件的必要性。
同样,我已经通过相关提供商直接配置了我的数据库实例。
NODE_ENV=production npm start 在本地一切正常,这向我的应用表明它应该连接到远程 Redis 实例(RedisToGo 和/或 OpenRedis)而不是本地 Redis 服务器。
我将 Redis 用于至少三件事:
Session store :: Connect-Redis :: 这在本地运行良好(应用服务器在本地运行但连接到远程 Redis 实例)并且似乎也可以在 Heroku 上运行——我通过刷新数据库进行了检查,然后向 Heroku 推送一个稍微新的版本,会话变量键被刷新。
-
Database :: Node-Redis :: 这在本地也可以正常工作(应用服务器也在本地运行,但连接到远程 Redis 实例以获取数据库),但似乎不适用于 Heroku。
WebSockets Transport Pub/Sub :: 我还没有彻底测试过。我猜它正在工作,但对于这个问题并不重要。
是Heroku实例可以通过Connect-Redis客户端连接到Redis实例,但是不能通过数据库客户端连接到同一个Redis实例。而我的本地运行版本能够通过这两个客户端连接到同一个(远程)实例。 (我已经通过终端客户端验证了这些发现,使用flushall 命令并等待刷新密钥。)
任何见解将不胜感激。
我将通过下面的 cmets 发布我的编辑和更新,因为它们带有时间戳。【问题讨论】:
-
是的,我的 env 开关是个坏消息,因为 Heroku 没有自动将 NODE_ENV 设置为生产环境。无论如何,我现在通过 Heroku 初始化了数据库;尽管仍然没有通过 WebSockets 获得对查询的响应。更多调试...
-
现在似乎正在得到响应,但延迟相当可怕。
-
有点跑题了:为什么要为实例使用不同的 Redis 提供程序?是为了 HA 吗?
-
我想尽可能多地进行测试,以比较性能并隔离问题和错误。说明:一周前,我只将我的应用程序部署到 Nodejitsu,它以惊人的方式失败,而它在本地运行良好。他们的支持部分敦促我深入研究我的代码以找到错误。我首先部署到 Heroku 的唯一原因是(首先向我自己)证明错误不在我的代码中。 Heroku 不是这个应用程序的长期解决方案,因为它构思会话和状态的方式与我使用的协议不兼容。 Linode。
-
可能存在混杂因素,但我注意到 Rtg 与 OpenRedis 相比具有更好的延迟(更少),并且 IrisRedis 在这方面功能失调。 (Nodejitsu 也得分不高。)在 Linode 上,我可以在同一个虚拟盒子上运行 Redis 实例,这样应该非常快。我们保留 Rtg (mini) 用于备份、诊断等。