2017-09-05 43 views
2

我想我的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

回答

2

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