如何从两个 Openshift 应用程序访问 MongoDB 数据库?

How do you access a MongoDB database from two Openshift apps?

我希望能够从 2 个 Openshift 应用程序访问我的 MongoDB 数据库 - 一个应用程序是通过浏览器的交互式数据库维护应用程序,另一个是通过开班应用程序。正如我在 Openshift 中看到的那样,MongoDB 在特定应用程序的文件夹 space 中设置,而不是独立于 space.

完成对数据库的多应用访问的方法是什么?

这并不理想,但这是我将两个 Openshift 应用程序的功能合并为一个的唯一选择吗?那味道就像一盘糟糕的意大利面。

请阅读 open shift 博客中的以下文章:https://blog.openshift.com/sharing-database-across-applications/

2018 更新:这适用于 Openshift 2。版本 3 非常不同,但是 linux 和缩放的一般规则适用,细节已过时。

虽然@MartinB 的回答及时正确,但只是一个link,所以让我把要点放在这里。

假设非共享数据库的设置已经完成,您需要找到它的主机和端口。您可以 ssh 到您的应用程序(带有数据库的应用程序)或使用 rhc:

rhc ssh -a appwithdb
env | grep MONGODB 

env 带来了所有的环境变量,grep 过滤它们只显示 Mongo 相关的。您应该会看到类似以下内容:

OPENSHIFT_MONGODB_DB_HOST=xxxxx-yyyyy.apps.osecloud.com
OPENSHIFT_MONGODB_DB_PORT=zzzzz

xxxxx is the ID of the gear that Mongo sits on
yyyyy is your domain/namespace
zzzzz is MongoDB port

现在,您可以使用它们从 Openshift 环境中的任何位置创建到数据库的连接。另一个应用程序必须使用 xxxxx-yyyyy:zzzzz URL。您可以将它们存储在自定义变量中,以便于维护。

$ rhc env-set \
MYOWN_DB_HOST=xxxxx-yyyyy \
MYOWN_DB_PORT=zzzzz \
MYOWN_DB_PASSWORD=****** \
MYOWN_DB_USERNAME=admin..... \
MYOWN_DB_NAME=dbname...

然后使用环境变量代替标准变量。请记住,当数据库移走时,它们不会自动更新。