将 Heroku 插件与 node.js 一起使用

Posted

技术标签:

【中文标题】将 Heroku 插件与 node.js 一起使用【英文标题】:Use Heroku addon mongolab with node.js 【发布时间】:2015-01-17 22:42:09 【问题描述】:

我在 mongo lab 中使用 node.js,我已经按照 mongolab 教程 (https://devcenter.heroku.com/articles/mongolab#getting-your-connection-uri) 在我的代码中更改了我的 db url:

module.exports = new Db(settings.db, new Server('mongodb://heroku_app3178:e6dd5g3btvanua3gfbmk6@ds051740.mongolab.com', 51740, ), safe: true);

我用本地运行进行了测试,我确实看到 node 正在尝试连接到这个新 URL。

但是当我部署到 Heroku 时。 Heroku 总是抱怨这个。 我尝试了不同的东西 3 个小时没有任何线索。 这是我的日志,你能帮忙吗?

2014-11-20T06:35:55.290572+00:00 heroku[api]: Release v17 created by abcc@gmail.com
2014-11-20T06:35:57.385492+00:00 heroku[web.1]: Starting process with command `node app.js`
2014-11-20T06:35:58.836675+00:00 heroku[web.1]: State changed from starting to up
2014-11-20T06:35:59.876883+00:00 app[web.1]: app.usr local
2014-11-20T06:36:00.396662+00:00 app[web.1]:     at Socket.emit (events.js:95:17)a
2014-11-20T06:36:00.394396+00:00 app[web.1]: 
2014-11-20T06:36:00.396664+00:00 app[web.1]:     at net.js:440:14
2014-11-20T06:36:00.394894+00:00 app[web.1]:           throw err;
2014-11-20T06:36:00.396665+00:00 app[web.1]:     at process._tickCallback (node.js:419:13)
2014-11-20T06:36:00.396651+00:00 app[web.1]: Error: Error connecting to database: failed to connect to [127.0.0.1:27017] ====> why is this? so confused
2014-11-20T06:36:00.394918+00:00 app[web.1]:                 ^
2014-11-20T06:36:00.396654+00:00 app[web.1]:     at null.<anonymous> (/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:553:74)
2014-11-20T06:36:00.396656+00:00 app[web.1]:     at emit (events.js:106:17)
2014-11-20T06:36:00.396659+00:00 app[web.1]:     at emit (events.js:98:17)
2014-11-20T06:36:00.396658+00:00 app[web.1]:     at null.<anonymous> (/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15)
2014-11-20T06:36:00.396661+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection.js:512:10)
2014-11-20T06:36:00.394676+00:00 app[web.1]: /app/node_modules/connect-mongo/lib/connect-mongo.js:178
2014-11-20T06:36:00.415816+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=enigmatic-coast-5373.herokuapp.com request_id=165ef7e7-a68a-44b0-9706-f72fcd9a0ba4 fwd="54.83.129.179" dyno=web.1 connect=2ms service=540ms status=503 bytes=0
2014-11-20T06:36:01.075007+00:00 heroku[web.1]: State changed from crashed to starting
2014-11-20T06:36:01.074333+00:00 heroku[web.1]: State changed from up to crashed
2014-11-20T06:36:01.057123+00:00 heroku[web.1]: Process exited with status 8
2014-11-20T06:36:02.976453+00:00 heroku[web.1]: Starting process with command `node app.js`
2014-11-20T06:36:04.328809+00:00 heroku[web.1]: State changed from starting to up

【问题讨论】:

我认为您刚刚允许我们访问您的数据库。 别担心@Breanda,我删除了一些字符 好的,只是检查一下。祝你好运。 【参考方案1】:

您可以在代码中指定它连接到您的远程mongodb,这将影响本地和云实现,或者在heroku中,您可以使用环境变量进行云使用。转到您的 app-settings-reveal 配置变量,然后添加, 第一个字段: MONGOLAB_URI 第二个字段:mongodb://yourmongolabuser:yourmongolabpass@dsnumber.mongolab.com:number/yourapp MongoLab 向您显示 uri,您只需更改用户名和密码。

另一件可以帮助您的节点应用程序不崩溃的事情是将模式更改为生产,再次在 env 变量中: NODE_ENV=生产

【讨论】:

【参考方案2】:

您的错误消息显示您正在尝试连接到 localhost (127.0.0.1) 上的本地数据库。

您应该在代码中使用 Herkou 环境变量,例如:

module.exports = new Db(settings.db, new Server(process.env.MONGOLAB_URL, ), safe: true);

【讨论】:

以上是关于将 Heroku 插件与 node.js 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Heroku + MongoLab 插件与 Node.js 应用程序的连接错误 - 错误:连接 ECONNREFUSED 127.0.0.1:27017

将 Heroku 配置变量与 PHP 一起使用?

带有 Node.js 的 Heroku 上的 Tesseract-OCR

Node.js - 在 Heroku 上使用 MongoHQ 连接到 MongoDB

如何与 Heroku 和 iOS 一起做 AFNetworking?

将简单的 Node.js 和 Socket.io 聊天应用程序与 Rails 应用程序连接起来(在 Heroku 上)