从Redhat的Openshift2升级Node.js/Mongo应用到Openshift3,什么是mongodb URI?
我想我的Node.js和MongoDB成功安装在我的Openshift3“入门”的帐户。从Redhat的Openshift2升级Node.js/Mongo应用到Openshift3,什么是mongodb URI?
在Openshift2曾经有一个完整的MongoDB的URL的环境变量。现在似乎只有一个USER和PASSWORD变量。我如何知道服务器,端口等?
OpenShift(Kubernetes)在您的荚项目/命名空间创建吊舱时设置environment variables为大家服务。环境变量的前缀与它们对应的服务名称(服务名称转换为大写字母和连字符替换为下划线):
- {SERVICE_NAME} _SERVICE_HOST
- {SERVICE_NAME} _SERVICE_PORT
你Node.js应用程序仍然需要知道您为MongoDB数据库服务命名的内容以及数据库的用户名/密码,因此您需要在Node.js部署配置中的环境变量中设置它们。
假设你命名你的Node.js服务nodejs-ex
,你的数据库服务mongodb
,你的数据库sampledb
,您的用户名user
和密码pass
:
$ oc set env dc/nodejs-ex DATABASE_SERVICE_NAME=mongodb \
MONGODB_DATABASE=sampledb \
MONGODB_PASSWORD=pass \
MONGODB_USER=user
而且,在你的应用程序的某个地方(基于Node.js sample app):
if (process.env.DATABASE_SERVICE_NAME) {
var mongoServiceName = process.env.DATABASE_SERVICE_NAME.toUpperCase(),
mongoHost = process.env[mongoServiceName + '_SERVICE_HOST'],
mongoPort = process.env[mongoServiceName + '_SERVICE_PORT'],
mongoDatabase = process.env[mongoServiceName + '_DATABASE'],
mongoPassword = process.env[mongoServiceName + '_PASSWORD']
mongoUser = process.env[mongoServiceName + '_USER'];
if (mongoHost && mongoPort && mongoDatabase) {
mongoURL = 'mongodb://';
if (mongoUser && mongoPassword) {
mongoURL += mongoUser + ':' + mongoPassword + '@';
}
mongoURL += mongoHost + ':' + mongoPort + '/' + mongoDatabase;
}
}
谢谢。我看到很长的乱码演示代码,我的回答是“WTF?”希望(并且仍然希望)更简单的事情......在光明的一面,我想这是一个编写小型NPM模块的机会。 – user949300
另外,如果我想从mongo CLI进行连接,这不起作用。 – user949300
你是什么意思更简单?将服务名称传递给应用程序,并通过两个env vars访问。你还试图从哪里连接到mongo cli? – user2983542
难道[this](https://developers.openshift.com/databases/mongodb.html)是它吗? –
@克里斯g ^谢谢,但由于该职位是指'rhc'命令行界面,而不是新的'oc'之一,相信这些都是老v2的环境变量。 – user949300