2017-05-04 2 views
0

Derzeit verwende ich Bluemix, um eine Website mit PencilBlue bereitzustellen und zu hosten. Mein Problem liegt in der Verbindung eines Speicherdienstes "komponiere für Mongo" und des Pencilblue Frameworks. Diese Verbindung wird über VCAP JSON hergestellt. Die VCAP kommt mit der folgenden Struktur;Compose-for-mongodb Bluemix-Verbindung mit Pencilblue

Wie ich verstehe, ist "komponieren-für-mongodb" ein Cluster statt eines Servers. Wir müssen die Verbindung zwischen PencilBlue und diesem "Cluster" über VCAP JSON herstellen. Derzeit versuchen wir, den JSON Parse im config.js wie so führen:

if (typeof process.env.VCAP_SERVICES === 'string') { 
     try { 
      var vcapServices = JSON.parse(process.env.VCAP_SERVICES); 
      var vcapMongo = vcapServices['compose-for-mongodb'][0].credentials; 

      var uri = vcapMongo.uri; 

      mongoConfig.servers = [ 
       uri 
      ]; 

      var userPassword = uri.split('mongodb://')[1].split('@')[0].split(':'); 

      mongoConfig.authentication = { 
       un: userPassword[0], 
       pw: userPassword[1] 
      }; 

      var db = uri.split('?uri=')[0].split('/')[1]; 

      mongoConfig.options.mongos = { 
       ssl: true, 
       sslValidate: true, 
       sslCA: [new Buffer(vcapMongo.ca_certificate_base64, 'base64')], 
       poolSize: 1, 
       reconnectTries: 1 
      }; 

      mongoConfig.name = db; 

Wir ohne Erfolg mehrere Möglichkeiten ausprobiert haben.

Ist schon jemand auf dieses Problem gestoßen? Gibt es Unterlagen zu diesem Thema? Zu Reproduzieren

Schritte zum:

eine Bluemix Knoten App erstellen und verbinden Sie es mit dem "compose-for-mongodb" Storage-Service.

PencilBlue Version: 0.8.0

Umgebung Beschreibung: Node.js SDK in Bluemix und komponieren-for-mongodb Dienst verbunden

Antwort

1

Ich habe Erfahrung und Erfolg hatte die pencilblue Rahmen mit einer NoSQL-Datenquelle verbinden wie Compose-for-mongodb. Hier ist ein sample repo mit einigen nützlichen deploy to bluemix-Buttons, die alles für Sie einrichten - wenn Sie einen Turnkey-Ansatz wünschen (Achtung: Etwas Geduld ist erforderlich :-) Das Pipelineskript enthält einige hartcodierte Verzögerungen (~ 8 Min.) Unsicherheit bei der Instanziierung von Diensten). Für Ihre spezielle Frage sollte das Repository config.js helfen. Schließlich verwendet dieses Repo auch ein Medienanbieter-Plugin, das den Bluemix Object Storage-Dienst innerhalb von this repo verwendet.

Hier ein Auszug:

[....] 

try { 
    var services = JSON.parse(process.env.VCAP_SERVICES); 
    // look for a service starting with 'mysql' 
    // MySQL is the only one supported by Ghost right now 
    for (var svcName in services) { 
     if (svcName.match(/^compose-for-mongodb/)) { 
      mongoCreds = services[svcName][0]['credentials']; 
      var uriObject = mongodbUri.parse(mongoCreds.uri) 
      mongoCreds.host = uriObject.hosts[0].host 
      mongoCreds.port = uriObject.hosts[0].port 
      mongoCreds.user = uriObject.username 
      mongoCreds.password = uriObject.password 
      mongoCreds.client = 'mongo'; 
      mongoCreds.userpass = mongoCreds.user + ":" + mongoCreds.password + "@" 
      mongoCreds.db = uriObject.database; 
     } 
    } 
} 

[....] 

"db": { 
     "type": mongoCreds.client, 
     "servers": [ 
      "mongodb://" + mongoCreds.userpass + mongoCreds.host + ":" + mongoCreds.port 
     ], 
     "name": mongoCreds.db, 
     "options": { 
      "server": { 
      "ssl": cloud, 
      "sslValidate": cloud, 
      "sslCert": Buffer.from(mongoCreds.ca_certificate_base64, 'base64').toString('ascii'), 
      "sslCA" : [Buffer.from(mongoCreds.ca_certificate_base64, 'base64').toString('ascii')] 
      } 
     }, 
     "writeConcern": "majority", 
     "query_logging": false, 
     "authentication": { 
      "un": mongoCreds.user, 
      "pw": mongoCreds.password 
     } 
    }, 

[....] 
+0

die Datei lebensrettend war, danke –