2012-10-23 16 views
3

我在mongolab上設置了一個mongodb副本。Heroku +貓鼬連接錯誤:在集合中找不到主服務器

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

這個網址我使用的連接字符串:

mongodb://username:[email protected]:39897/pm_prod,mongodb://someid-a1.mongolab.com:39897 

我不明白的主要是:我的maching和heroku雲主機之間有什麼區別。

我已經嘗試刪除node_modules和npm安裝它們以確保我具有與heroku相同的版本。 (因爲heroku在每次部署時都這樣做)。

謝謝,並對不起我的英文不好

+0

不知道我可以指導你的技術解決方案,但共享與Heroku的問題類似的經歷可能的幫助。 MongoHQ被用於數據庫。本地機器+本地MongoDB,本地機器+ MongoHQ接口工作完美。 Heroku + MongoHQ提供了錯誤,日誌不是很有幫助。花了幾天解決問題。除了基本的支持,Heroku是每月1000美元;買不起。轉移到AWS並且到目前爲止沒有問題。 – almypal

回答

4

這可能是一個URI問題。對於DB的URI格式爲:

mongodb://<user>:<pass>@host:port,host:port,...,host:port/db_name 

這意味着,

mongodb://username:[email protected]:39897/pm_prod,mongodb://someid-a1.mongolab.com:39897 

應該是:

mongodb://username:[email protected]:39897,someid-a1.mongolab.com:39897/pm_prod 

這也是值得注意他人:如果您正在使用Heroku的MongoLab添加 - 在上,您的URI作爲process.env.MONGOLAB_URI上的環境變量提供,因此您不必將URI放在代碼中。

這也可能與Heroku和Mongo之間的連接問題有關。見https://github.com/jcottr/temps-mort,它引用門票有兩種節點蒙戈司機:

如果

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

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

+0

這可能是一個答案。我正在等待即將發佈的mongodb驅動程序補丁。 (版本1.1.12)。 –