从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变量。我如何知道服务器,端口等?

+1

难道[this](https://developers.openshift.com/databases/mongodb.html)是它吗? –

+1

@克里斯g ^谢谢,但由于该职位是指'rhc'命令行界面,而不是新的'oc'之一,相信这些都是老v2的环境变量。 – user949300

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; 
    } 
} 
+0

谢谢。我看到很长的乱码演示代码,我的回答是“WTF?”希望(并且仍然希望)更简单的事情......在光明的一面,我想这是一个编写小型NPM模块的机会。 – user949300

+0

另外,如果我想从mongo CLI进行连接,这不起作用。 – user949300

+0

你是什么意思更简单?将服务名称传递给应用程序,并通过两个env vars访问。你还试图从哪里连接到mongo cli? – user2983542