我希望在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 ping mlab位置,它运行正常。不幸的是我无法进行% netcat -w 3 -v ds012345.mlab.com 12345
测试。该工具(netcat / nc)在OpenShift中不可用。
同样,当我从本地主机运行节点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 ...我想更好地理解。敬请关注。
答案 0 :(得分:1)
更新可能来到这里的任何人。我向mlab提交了一份支持请求。我收到了立即回复(非常棒的支持!)
您需要将mongo shell版本升级到3.0+才能获得 连接并验证mLab Sandbox数据库服务器。它看起来 像版本2.4.9正在使用。
所以我肯定从我的localhost使用mongo shell 3.0版。我无法控制@ OpenShift用于该命令行功能..但是谁......让我们不要忘记这里的大图。我真的想通过var MongoClient = require('mongodb').MongoClient;
连接调用来使用我的节点服务器来联系mlab。我们做同样的检查。我的package.json文件中是否列出了最新版本的mongodb?哎呀..
轻松修复。更新package.json以要求更新版本的mongodb。在OpenShift取得成功。 Yipee!