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

时间:2012-10-23 08:54:55

标签: node.js mongodb heroku replication mongoose

我在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);
  }
);

这个网址我用作连接字符串:

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

我无法理解的主要问题是:我的机器和heroku云托管之间有什么区别。

我已经尝试删除node_modules并且npm安装它们以确保我拥有与heroku相同的版本。 (因为heroku在每次部署时执行此操作)。

谢谢,抱歉我的英文不好

1 个答案:

答案 0 :(得分: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