如何配置StrongLoop LoopBack MongoDB数据源以部署到Heroku

use*_*320 7 javascript heroku mongodb strongloop loopbackjs

我正在使用LoopBack ver.1.6并使用以下数据源配置运行开发的本地mongoDB服务器:

  "mongodb": {
    "defaultForType": "mongodb",
    "connector": "loopback-connector-mongodb",
    "database": "xxxdbname",
    "host": "localhost",
    "port": "27017"
  },
Run Code Online (Sandbox Code Playgroud)

现在我想部署到Heroku但我不知道如何配置数据源指向MongoLab数据库,因为它有一个动态生成的连接字符串:

来自Heroku dox:

var mongo = require('mongodb');

var mongoUri = process.env.MONGOLAB_URI ||
  process.env.MONGOHQ_URL ||
  'mongodb://localhost/mydb';

mongo.Db.connect(mongoUri, function (err, db) {
  db.collection('mydocs', function(er, collection) {
    collection.insert({'mykey': 'myvalue'}, {safe: true}, function(er,rs) {
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

那么我需要对我的数据源JSON进行哪些更改来映射Heroku连接字符串?

kyn*_*nan 7

这已经(为2014年6月27日)的被解决:创建一个文件datasources.local.js,内容如下(这里mongodb为您的数据源名称):

var mongoUri = process.env.MONGOLAB_URI ||
  process.env.MONGOHQ_URL ||
  'mongodb://localhost/mydb';

module.exports = {
  mongodb: {
    defaultForType: "mongodb",
    connector: "loopback-connector-mongodb",
    url: mongoUri
  }
};
Run Code Online (Sandbox Code Playgroud)

注意: datasources.json仍然需要(可以为空)并.js覆盖.json文件中的配置.

  • 你仍然需要datasources.json,即使它是空的. (2认同)
  • 我花了几个小时才发现.js只是json配置的补充.所以json被加载,然后你可以使用.js文件来覆盖值. (2认同)

小智 5

这是LoopBack的TODO,支持从环境变量和其他来源配置数据源/模型.一个想法是使用模板引擎加载datasources.json,以便它可以在运行时解析变量.

与您的问题相关,LoopBack允许您使用'url'属性配置数据源.例如:

{
   "connector": "loopback-connector-mongodb",
   "url": "mongodb://localhost:27017/mydb" 
}
Run Code Online (Sandbox Code Playgroud)

作为一种变通方法,你可以写一个部署后脚本的Heroku,以取代process.env.MONGOLAB_URI或process.env.MONGOHQ_URL的URL值.

sed -i.bak s/MONGODB_URL/$MONGOHQ_URL/g datasources.json
Run Code Online (Sandbox Code Playgroud)

同时,请在https://github.com/strongloop/loopback/issues上打开一个问题.