Heroku+mongoose连接错误:集合中找不到主服务器

3

我在mongolab上拥有一个mongodb副本集。

我正在使用nodejs + mongoose。当我尝试从我的本地计算机连接时,一切都正常。

但是,在部署到heroku后发生了一些错误,mongoose出现了奇怪的错误:

[Error: no primary server found in set]

以下是代码示例(server.js):

async.series([
  function(callback){
    console.log('DB Connection: ' + siteConf.mongo_url);
    mongoose.connect(siteConf.mongo_url, siteConf.mongo_options, callback);
  },      
  function(callback){
    http.createServer(app).listen(siteConf.port, callback);
  }
],
function(err, results){

 if (err) {
   console.log(err);
 }

 console.log('Running in ' + (process.env.NODE_ENV || 'development') + ' mode @ ' + siteConf.uri);
  }
);

我正在使用此URL作为连接字符串:

mongodb://username:password@someid-a0.mongolab.com:39897/pm_prod,mongodb://someid-a1.mongolab.com:39897

我的主要疑问是:我的电脑和Heroku云托管之间有什么不同。

我已经尝试删除node_modules并通过npm安装它们以确保我拥有与Heroku相同的版本。(因为Heroku在每次部署时都会这样做)。

谢谢,对我的英语抱歉。


不确定我是否能为您提供技术解决方案,但分享一下在Heroku遇到问题的类似经验可能会有所帮助。MongoHQ用于数据库。本地机器+本地MongoDB、本地机器+MongoHQ接口都运行良好。Heroku + MongoHQ出现错误,日志并不是很有用。花了几天时间进行故障排除。除了基本支持外,Heroku每月需要1000美元,无法承受。转移到AWS,到目前为止还没有出现任何问题。 - almypal
1个回答

4
这可能是一个URI问题。DB URI的格式为:
mongodb://<user>:<pass>@host:port,host:port,...,host:port/db_name

那意味着
mongodb://username:password@someid-a0.mongolab.com:39897/pm_prod,mongodb://someid-a1.mongolab.com:39897

应该是:
mongodb://username:password@someid-a0.mongolab.com:39897,someid-a1.mongolab.com:39897/pm_prod

值得注意的是,如果您使用Heroku的MongoLab附加组件,则您的URI可作为环境变量process.env.MONGOLAB_URI在代码中使用,因此您不必将URI放在代码中。
这也可能与Heroku和Mongo之间的连接问题有关。请参见https://github.com/jcottr/temps-mort,其中引用了两个与Node Mongo驱动程序相关的票据。

https://jira.mongodb.org/browse/NODE-4

https://jira.mongodb.org/browse/NODE-5


这可能是一个答案。我正在等待mongodb驱动程序中的修补补丁,它应该很快发布(版本1.1.12)。 - Dmitry Chirkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接