2015-11-28 60 views
1

當試圖啓動使用MongoLab插件Heroku上託管Node.js應用程序, 我在Heroku日誌時收到以下錯誤連接到MongoDB。它看起來像試圖連接到本地mongo,即使我已經設置了heroku環境變量。Heroku + MongoLab插件與Node.js應用程序連接錯誤 - 錯誤:連接ECONNREFUSED 127.0.0.1:27017

我的整個代碼是在這裏在GitHub上:https://github.com/yhagio/meetup_planner

My gist for this issue

Heroku的日誌

2015-11-28T22:22:58.460531+00:00 heroku[web.1]: Starting process with command `node server.js` 
2015-11-28T22:22:59.353911+00:00 app[web.1]: Server started at port number: 38701 
2015-11-28T22:22:59.303795+00:00 app[web.1]: Connecting to DB : mongodb://USERNAME:[email protected]:59804/heroku_tb6frdh6 
2015-11-28T22:22:59.371719+00:00 app[web.1]: 
2015-11-28T22:22:59.371723+00:00 app[web.1]: /app/node_modules/mongodb/lib/server.js:235 
2015-11-28T22:22:59.371725+00:00 app[web.1]:   process.nextTick(function() { throw err; }) 
2015-11-28T22:22:59.371725+00:00 app[web.1]:          ^
2015-11-28T22:22:59.371729+00:00 app[web.1]: Error: connect ECONNREFUSED 127.0.0.1:27017 
2015-11-28T22:22:59.371730+00:00 app[web.1]:  at Object.exports._errnoException (util.js:860:11) 
2015-11-28T22:22:59.371731+00:00 app[web.1]:  at exports._exceptionWithHostPort (util.js:883:20) 
2015-11-28T22:22:59.371732+00:00 app[web.1]:  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14) 
2015-11-28T22:23:00.052255+00:00 heroku[web.1]: Process exited with status 1 
2015-11-28T22:23:00.880672+00:00 app[web.1]: Connecting to DB : mongodb://USERNAME:[email protected]:59804/heroku_tb6frdh6 
2015-11-28T22:23:00.939388+00:00 app[web.1]: 
2015-11-28T22:23:00.939392+00:00 app[web.1]: /app/node_modules/mongodb/lib/server.js:235 
2015-11-28T22:23:00.939393+00:00 app[web.1]:   process.nextTick(function() { throw err; }) 
2015-11-28T22:23:00.939397+00:00 app[web.1]: Error: connect ECONNREFUSED 127.0.0.1:27017 
2015-11-28T22:23:00.939394+00:00 app[web.1]:          ^
2015-11-28T22:23:00.939398+00:00 app[web.1]:  at Object.exports._errnoException (util.js:860:11) 
2015-11-28T22:23:00.939399+00:00 app[web.1]:  at exports._exceptionWithHostPort (util.js:883:20) 
2015-11-28T22:23:00.939400+00:00 app[web.1]:  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14) 
2015-11-28T22:23:00.917276+00:00 app[web.1]: Server started at port number: 42573 
2015-11-28T22:23:01.626965+00:00 heroku[web.1]: State changed from starting to crashed 
2015-11-28T22:23:01.614846+00:00 heroku[web.1]: Process exited with status 1 
2015-11-28T22:23:13.224552+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=warm-retreat-5113.herokuapp.com request_id=54404d8a-7744-49ae-b744-4417abd4b347 fwd="166.62.227.154" dyno= connect= service= status=503 bytes= 
2015-11-28T22:23:13.581322+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=warm-retreat-5113.herokuapp.com request_id=063c0fef-8260-46b5-a0f6-b4d546e9a60b fwd="166.62.227.154" dyno= connect= service= status=503 bytes= 

這裏是我讓到MongoDB的 server/db_connection.js的連接(從Heroku的MongoLab插件)的代碼

var mongoose = require('mongoose'); 
var config = require('../express-config'); 
var userModel = require('./models/user'); 
var eventModel = require('./models/event'); 

function makeDefaultConnection() { 
    var uri = process.env.MONGOLAB_URI || '127.0.0.1/meetupplanner'; 
    console.log('Connecting to DB : ', uri); 

    var conn = mongoose.createConnection(uri); 

    conn.on('error', function(err){ 
    console.log('Connection Error ::: ', err); 
    }); 

    conn.model('User', userModel.userSchema); 
    conn.model('Event', eventModel.eventSchema); 
    return conn; 
} 

module.exports.defaultConnection = makeDefaultConnection(); 

檔案

web: node server.js 

Server.js

... 
var port = process.env.PORT || 3000; 
app.listen(port, function() { 
    console.log('Server started at port number: ', port); 
}); 

後,我加在Heroku MongoLab附加組件我覈實,我的MONGOLAB_URI設置在Heroku(設置>配置變量)

參考:https://devcenter.heroku.com/articles/mongolab

在StackOverflow上提出的問題:

注意,我可以連接到通過蒙戈外殼:

$ mongo ds059804.mongolab.com:59804/heroku_tb6frdh6 -u USERNAME -p PASSWORD 

我覺得憑據的罰款。

+0

它看起來像什麼是錯的與你的配置變量,儘管你所說的有正確的。我認爲你也會遇到'conn.model('User',userModel.userSchema)'問題,因爲我認爲模型是貓鼬上的方法,而不是mongoose.connect –

+0

@SimonH哦對不起,我修改了'connect 'createConnection',它在本地工作,但不在Heroku上。我刪除並重新添加了插件,但仍然是同樣的問題。因爲我可以使用憑證登錄到mongo shell,但配置看起來不錯... – Yuichi

+0

如果您看時間戳,我不知道您認爲的代碼是否會導致問題。對本地主機的引用似乎晚於連接嘗試的console.log –

回答

2

我終於想通了。這是connect-mongo會話的中間件配置。

在我的配置,它是:

app.use(session({ 
    ... 

    // ===== Following 3 lines are trying to connect to local db ===== 
    store: new MongoStore({  
    'db': 'meetupplanner' 
    }), 

    // ===== So, I replaced 3 lines above with following ===== 
    store: new MongoStore({ 
    url: process.env.MONGOLAB_URI 
    }), 

    ... 
+0

感謝您發佈您的解決方案。我剛剛遇到了這個錯誤,事實證明,這也與我的connect-mongo有關。 – braitsch

+0

哈哈哇。我試圖弄清楚這一點,不能相信我錯過了它。非常感謝! – Mike

0

作爲下一個步驟,你爲什麼不這樣做,讓你確信該配置變量是使它通過

var uri = process.env.MONGOLAB_URI || config.dbHostName; 
console.log('===== Connecting to DB ... =====', uri); 
var conn = mongoose.createConnection(uri,... 
+0

更新了代碼,但這不會更改連接錯誤的任何內容。 (還是)感謝你的建議。 – Yuichi

+0

我所能建議的只是在本地運行代碼,但確保它指向Mongolab並轉向當地的mongo。我想知道是否有其他線路導致問題 –

+0

是的,我在本地嘗試了相同的MongoLab,應用程序運行沒有問題。由於錯誤消息顯示「錯誤:連接ECONNREFUSED 127.0.0.1:27017」,它只是在Heroku上不起作用。我在Heroku&MongoLab上申請了一張支持票,所以我會在嘗試別的時候等待。 – Yuichi

相關問題