OpenShift 服务器与 Mlab.com 之间的数据库连接失败?

Failed Database Connection between OpenShift Server and Mlab.com?

我希望在 OpenShift 上托管一个 node.js 服务器,利用在 mlab.com 上托管的 MongoDB 数据库(mongolab.com 的新版本)这是一个 pretty straight forward tutorial. 根据该教程,事情看起来很简单。该教程可能有点过时,但似乎直接针对我的应用程序(较少来自 Mongolab 的更新 --> mlab)我过去使用过 Mongolab,他们提供了很好的服务。

所以我已经建立了我的数据库。我已经编写了我的节点代码并从本地主机对其进行了测试,它运行良好。是的,有几行不同,但差别不大。我在推送到 OpenShift 时使用相同的 git 目录。代码非常简单。

databaseUrl = 'mongodb://UserNameHere:PasswordHere@ds012345.mlab.com:12345/DataBaseName';
if (process.env.MLAB_URI) {
    databaseUrl = process.env.MLAB_URI;
}

MongoClient.connect(databaseUrl, function(err, db) {
    assert.equal(null, err, "Database Connection Troubles: " + err);

在 RHC 登录后从我的终端测试 process.env.MLAB_URI。

[ABC-XYZ.rhcloud.com xxxxxxxxxxx]\> echo $MLAB_URI
mongodb://<username>:<password>@ds012345.mlab.com:12345/DataBaseName
[ABC-XYZ.rhcloud.com xxxxxxxxxxx]\> echo $OPENSHIFT_REPO_DIR
/var/lib/openshift/xxxxxxxxxxxx/app-root/runtime/repo/

使用 $ 进行测试,在代码中使用 process.env. 调用。显然我已经更改了我的用户名、密码和 Openshift 服务器标识,但我已经检查过并且似乎没有拼写错误。如果我不使用 MLAB_URI 环境变量,我在 openshift 上也会遇到同样的失败。就像 OpenShift 服务器的连接被关闭了。

Mlab 确实提供了一些工具来验证与 MongoDB 的连接。 Here's link to the Mlab assist stuff. 我可以从 RHC 登录 ping mlab 位置,它工作得很好。很遗憾,我无法进行 % netcat -w 3 -v ds012345.mlab.com 12345 测试。 OpenShift 不提供该工具 (netcat / nc)。

同样,当我从我的本地主机 运行 我的节点 file.js 时,这个东西工作正常。我可以看到数据被存放在 mlab 服务器上。如果我从 Openshift 运行 使用

它会失败
throw err ^
AssertionError: Database Connection Troubles: MongoError: auth failed

如果我在 OpenShift 的相同档位使用 MongoDB 墨盒,代码工作正常。不幸的是,我在不同的位置有几台不同的服务器,它们都在共享信息。有人知道这里发生了什么吗?

更新:我已经从使用 RHC 登录到 OpenShift 的终端进行了一些额外的测试。

[ABC-XYZ.rhcloud.com xxxxxxxxxxx]\> mongo ds012345.mlab.com:12345/dbName -u <dbuser> -p <password>;
MongoDB shell version: 2.4.9
connecting to: 127.6.xyz.xyz:27017/admin
Fri Mar 11 04:14:52.770 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228
exception: login failed

令人惊讶的是连接到:url:27017/admin 行...我想更好地理解这一点。敬请关注。

为可能到达这里的任何其他人更新。我向 mlab 提交了支持请求。我立即收到了回复(非常棒的支持!)

You'll need to upgrade your mongo shell version to 3.0+ in order to connect and authenticate to an mLab Sandbox database server. It looks like version 2.4.9 is being used.

所以我肯定是在我的本地主机上使用 mongo shell 3.0 版。对于该命令行功能,我几乎无法控制@ OpenShift ..但是哇......让我们不要忘记这里的大局。我真的在尝试使用我的节点服务器通过 var MongoClient = require('mongodb').MongoClient; 连接呼叫联系 mlab。让我们做同样的检查。我的 package.json 文件中是否列出了最新版本的 mongodb?糟糕..

轻松修复。更新 package.json 以需要更新版本的 mongodb。在 OpenShift 取得成功。一皮!