5

我正在尝试使用 dokku 在数字海洋上部署带有 mongodb 的 Node.js 应用程序。不幸的是,我在节点应用程序连接到 mongodb 时遇到了一些问题。

到目前为止我做了什么。0. 我在 git repo 中有一个 node.js 应用程序 1. 在数字海洋中创建了 dokku 实例(在 ubuntu 14.04 上运行) 2. 我创建了一个 dokku-mongodb-plugin(参见https://github.com/jeffutter/dokku -mongodb-plugin):按照那里的 git clone 等安装说明进行操作。3.将我的应用推送到数字海洋服务器(git push -u production master) 4.尝试创建一个mongodb进程:(在服务器上):dokku mongodb:create testapp(testapp是我的应用的名称) 5.运行我的应用程序:dokku 运行 testapp 节点 app.js

这会导致连接错误(在底部)

我已经测试过:dokku mongodb:list

它没有返回任何东西,这让我觉得插件可能有问题?

否则,我怀疑这可能是由于 mongodb 在与标准 localhost 不同的 ip / 进程下运行。

无论如何,我不确定问题是什么。任何帮助,将不胜感激。

干杯,迈克

vents.js:72 投掷器;// 未处理的“错误”事件 ^ 错误:在 null 处无法连接到 [localhost:27017]。(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:546:74) 在空时发出 (events.js:106:17)。(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:150:15) 在 Socket 的发射 (events.js:98:17)。(/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:533:10) 在 Socket.emit (events.js:95:17) 在 net.js:440:14 在进程。 _tickCallback (node.js:419:13)

4

1 回答 1

6

dokku mongodb 插件为其 mongodb docker 容器使用 RFC 1918 专用网络地址。如本文所述,如何从主机获取 Docker 容器的 IP 地址?您可以从 docker inspect 获取地址。从 docker ps 获取 dokku-mongodb 容器的容器 id,然后使用该容器 id 运行 dokku inspect。

当你使用dokku mongodb:link<app><database>或者创建数据库时指定app名,在你的app的dokku config中设置一系列mongodb环境变量,你可以通过运行dokku config<app>查看。

$ dokku config test
=== test config vars ===
NODE_ENV:         test
MONGODB_DATABASE: "myapp-test-db-production"
MONGODB_HOST:     "172.17.0.123"
MONGODB_PORT:     "27017"
MONGODB_USERNAME: "test"
MONGODB_PASSWORD: "***********************"
MONGO_URL:        "mongodb://test:**********************@172.17.0.123:27017/myapp-test-db-production"

您需要从 mongodb 连接代码中引用这些环境变量。就我而言,我使用的是 meanjs.org 模板,因此我将 config/env/test.js 中 db 的值设置为 db:process.env.MONGO_URL,并使用 dokku config:set 添加了 NODE_ENV=test。

'use strict';

module.exports = {
    db: process.env.MONGO_URL,
    // db: 'mongodb://localhost/mean-test',
< snip > 
于 2014-08-17T22:49:48.917 回答