3

mongolabにmongodbレプリカを設定しています。

nodejs+mongooseを使用しています。ローカルマシンから接続しようとすると、すべて問題ありません。しかし、herokuにデプロイした後、何か問題が発生し、マングースに奇妙なエラーが発生しました。

[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はデプロイごとにこれを行うため)。

ありがとう、そして私の悪い英語をお詫びします

4

1 に答える 1

4

これはURIの問題である可能性があります。DBURIの形式は次のとおりです。

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を参照してください。これは、NodeMongoドライバーの2つのチケットを参照しています。

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

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

于 2012-10-24T18:05:28.263 に答える