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

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

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

我不明白的主要事情是:我的机器和heroku云托管有什么区别。

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

谢谢,对不起我的英语不好

4

1 回答 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

于 2012-10-24T18:05:28.263 回答