今天早上我将更新的Meteor项目部署到Heroku上。
我正在从1.1.0.3
升级到1.4.1.1
。
正确使用Meteor Buildpack Horse所有内容,但应用程序错误输出错误;
MongoError:种子列表不包含mongos代理,replicaset连接需要在URI或options对象中提供参数replicaSet,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:在replicaset中找不到主要内容
这似乎是明智的,因为复制项不存在,但是当我输入正确的值时,我再次得到原始错误,说种子列表不包含代理。
我的副本集名称中有一个破折号,我不知道这是否相关。
我尝试使用在Mongo客户端中抛出此错误的URL,它允许我连接到实例,所以我知道所有细节都是正确的。
我也尝试转义replicaSet,因此?replicaSet=set\-name
这给了我MongoError: no primary found in replicaset
错误。
我的MongoDB提供商有一张开放票,但我怀疑这是Meteor / me问题!
答案 0 :(得分:6)
Meteor v1.4使用新版本的MongoDB驱动程序。
虽然MONGO_URL
环境变量的格式正确,但错误是由MONGO_OPLOG_URL
引起的,应修改该值以包含replicaSet
参数。
有关详细信息和以下注释(有关Compose.io),请参阅this GitHub issue。
使用
meteor run
在开发模式下自动启用Oplog拖尾,并且可以使用MONGO_OPLOG_URL
环境变量在生产中启用。(...)
要在生产Meteor应用程序中使用oplog拖尾,必须将MongoDB服务器配置为replica set;单个 -
mongod
数据库没有oplog。您的群集可能不使用Mongo分片。
从1.4开始,您必须确保
MONGO_OPLOG_URL
包含replicaSet
参数(请参阅the changelog和the oplog documentation)。注意:某些MongoDB主机提供程序可能具有不要求您使用
replicaSet
参数的部署设置。例如,Compose.io有两种类型的部署,MongoDB Classic和MongoDB +。新的MongoDB +产品是分片设置,而不是真正的副本集(尽管分片被实现为副本集),因此它不需要replicaSet
参数,如果将Meteor添加到连接中,Meteor将抛出错误字符串。