【问题标题】:Failed Database Connection between OpenShift Server and Mlab.com?OpenShift 服务器和 Mlab.com 之间的数据库连接失败?
【发布时间】:2016-03-11 08:34:33
【问题描述】:

我希望在 OpenShift 上托管一个 node.js 服务器,利用托管在 mlab.com(mongolab.com 的新版本)上的 MongoDB 数据库这是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 line...我想更好地理解这一点。敬请关注。

【问题讨论】:

  • 这似乎不是网络问题,但正如错误所说的那样,它是“身份验证失败”问题。因此,您使用的凭据与连接不匹配。我注意到您在问题中使用了术语"collectionName",实际上它是"databaseName"。可能是您对此感到困惑并试图连接到不存在的数据库吗?使用无权创建数据库的用户帐户? (顺便说一句,我希望该帐户没有该权限)。
  • @BlakesSeven CollectionName...哎呀。脑袋放屁。我会更新我的原作。不,它的数据库名称。你是完全正确的。谢谢。实际代码确实指示了正确的数据库名称。请记住,当我通过 LocalHost 进行测试时,我在同一目录中使用完全相同的代码。我得到了完全不同的结果。当我运行 localhost 时,数据被添加到数据库中,但是当我通过 OpenShift 尝试相同的技巧时,身份验证失败。它必须是某种许可问题。我想知道这是否不是 OpenShift 的端口问题。如果我没记错的话,他们有一些奇怪的要求..
  • 我想你没有其他东西可以从你的 openshift 虚拟机连接到实例吗?您是否有权安装 mongotools 软件包?您是否尝试过使用相同的 URI 从您自己的机器进行连接?就像我说的,“身份验证错误”意味着用户/密码无法识别或无权连接到您正在使用的数据库命名空间。
  • 我不确定我是否理解您的第一条评论。我能够获取我的 OpenShift 代码以从其他来源获取数据(通过节点包 X-ray)。我可以从 RHC ping mlab.com。我从来没有接触过mongotools。如果存储@ OpenShift,我认为这是管理 MongoDB。我确实在 OpenShift 的这个设备上构建了一个 mongodb,我一直在使用它,但我现在意识到我需要让不同的服务器使用相同的数据。 auth 登录/密码代码内置在mongodb:// 行中,并且可以在本地主机上正常工作。我明白这一切听起来多么不一致,这就是我所看到的。
  • 我可以尝试一些 mongo 命令行工具来尝试从 OpenShift 链接到 mlab,看看会发生什么。

标签: node.js mongodb openshift mlab


【解决方案1】:

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

您需要将您的 mongo shell 版本升级到 3.0+ 才能使用 连接到 mLab 沙盒数据库服务器并进行身份验证。它看起来 像正在使用 2.4.9 版本。

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

轻松修复。更新 package.json 以要求更新版本的 mongodb。在 OpenShift 上取得成功。耶!

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2020-06-20
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多