问题描述
当使用 Redis 运行单独的 Parse Server 和 Parse LiveQuery Servers 以实现可扩展性时,Parse Server 不会发布到 Redis 以将新更新推送到 LiveQuery Servers。
当前设置如下:
--主要的解析服务器--
```
var api = new ParseServer({
databaseURI: process.env.DATABASE_URI,
cloud: process.env.CLOUD_CODE_MAIN,
appId: process.env.APP_ID,
masterKey: process.env.MASTER_KEY,
fileKey: process.env.FILE_KEY,
serverURL: process.env.SERVER_URL,
liveQuery: {
classNames: ["Random","ClassNames"],
redisUrl: process.env.REDIS_URL
}
```
--解析实时查询服务器--
```
var api = new ParseServer({
appId: process.env.APP_ID,
masterKey: process.env.MASTER_KEY,
serverURL: process.env.SERVER_URL
});
var app = express();
var mountPath = process.env.PARSE_MOUNT || '/leap';
app.use(mountPath, api);
var port = process.env.PORT;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-live-query-server running on port ' + port + '.');
});
// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer, {
redisURL: process.env.HEROKU_REDIS_URL
});
```
重现步骤
- 在 Heroku 上创建一个主要的解析服务器应用程序,添加一个 Heroku Redis 作为附加组件
- 在 Heroku 上创建一个单独的解析 LiveQuery 服务器应用程序并链接到 Redis
- 相应地设置 Heroku 中的所有环境变量(使用 REDIS_URL 链接到连接到 Redis 实例时给出的更新的 Redis 附加 URL)
- 升级到付费 dynos 和 Redis
- 将客户端应用程序订阅指向 LiveQuery Server URL
- 从订阅的客户那里发送一条新消息
预期结果
期望主解析服务器将 LiveQuery 的更新发布到 Redis 以供 LiveQuery 服务器(订阅)读取,后者又会调用客户端中的 handle 方法。
实际结果
消息已创建,但客户端中的句柄方法从未被调用。
请记住,当主解析服务器和 LiveQuery 服务器在本地运行且 Redis 从 Heroku 运行时,此设置将起作用。
环境设置
服务器
- 解析服务器版本:2.5.3
- 操作系统:Heroku Dyno 和本地 MacOS High Sierra
- 硬件:Heroku 网络应用
- 参见上面关于本地和 Heroku 配置的描述
数据库 实验室
日志/跟踪
Redis 显示两个事件连接,Main Parse Server 显示消息对象的创建,重新加载客户端 View 将显示创建的消息。
最佳答案
您在发布端输错了参数“redisURL”。它是“redisURL”,而不是“redisUrl”。
关于heroku - 使用 Redis 解析 LiveQuery 独立服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46489751/