6

今天早上我去把我更新的 Meteor 项目部署到 Heroku 上。

我正在从升级1.1.0.31.4.1.1.

使用Meteor Buildpack Horse一切安装正确,但应用程序因错误而出错;

MongoError:种子列表不包含 mongos 代理,副本集连接需要在 URI 或选项对象中提供参数副本集,mongodb://server:port/db?replicaSet=name

MONGO_URL的,mongodb://u:p@url1:port,url2:port/db所以我把它改成了;

mongodb://u:p@url1:port,url2:port/db?replicaSet=set-name

如果我在 replicaSet 参数上犯了一个错误,我会得到这个错误;

MongoError:在副本集中找不到主节点

这似乎是明智的,因为副本集不存在,但是当我输入正确的值时,我再次收到原始错误,说种子列表不包含代理。

我的副本集名称中有破折号,我不知道这是否相关。

我试过的

我尝试使用在 Mongo 客户端中引发此错误的 URL,它允许我很好地连接到实例,所以我知道所有细节都是正确的。

我也尝试过转义副本集,所以?replicaSet=set\-name这给了我MongoError: no primary found in replicaset错误。

我的 MongoDB 提供商有一张未结票,但我怀疑这是 Meteor/me 的问题!

4

1 回答 1

6

Meteor v1.4 使用新版本的 MongoDB 驱动程序。

虽然MONGO_URL环境变量的格式正确,但错误是由 引起的MONGO_OPLOG_URL,应该修改它以包含一个replicaSet参数。

有关更多详细信息和以下说明(关于 Compose.io),请参阅此 GitHub 问题。

oplog 驱动程序文档

Oplog 拖尾在开发模式下使用 自动启用meteor run,并且可以在生产环境中使用MONGO_OPLOG_URL环境变量启用。

(...)

要在生产 Meteor 应用程序中使用 oplog tailing,您的 MongoDB 服务器必须配置为副本集;单mongod数据库没有 oplog。您的集群可能不使用 Mongo 分片。

迁移指南

从 1.4 开始,您必须确保您MONGO_OPLOG_URL包含一个replicaSet参数(请参阅更改日志oplog 文档)。

注意:某些 MongoDB 托管服务提供商的部署设置可能不需要您使用replicaSet参数。例如,Compose.io有两种部署类型,MongoDB Classic 和 MongoDB+。新的 MongoDB+ 产品是分片设置,而不是真正的副本集(尽管分片被实现为副本集),因此它不需要replicaSet参数,如果将其添加到连接字符串,Meteor 会抛出错误。

于 2016-09-10T07:16:45.623 回答