【问题标题】:How to configure StrongLoop LoopBack MongoDB datasource for deployment to Heroku如何配置 StrongLoop LoopBack MongoDB 数据源以部署到 Heroku
【发布时间】:2014-03-06 06:30:00
【问题描述】:

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

  "mongodb": {
    "defaultForType": "mongodb",
    "connector": "loopback-connector-mongodb",
    "database": "xxxdbname",
    "host": "localhost",
    "port": "27017"
  },

现在我想部署到 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) {
    });
  });
});

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

【问题讨论】:

    标签: javascript mongodb heroku loopbackjs strongloop


    【解决方案1】:

    现在(截至 2014 年 6 月 27 日)为 addressed:创建一个文件 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
      }
    };
    

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

    【讨论】:

    • 我删除了 datasources.json 并添加了一个 datasources.local.js 文件,如下所示:var postgresURI = process.env.DATABASE_URL; module.exports = { db: { defaultForType: 'postgresql', connector: 'postgresql', url: postgresURI } }; 在 model-config.json 我为所有部分设置了“dataSource”:“db”。它会引发以下错误:User is referencing a dataSource that does not exist: "db"。我理解错误,但为什么它被抛出。我错过了什么?
    • 你仍然需要datasources.json,即使它是空的。
    • 我花了几个小时才弄明白 .js 只是对 json 配置的补充。所以 json 被加载,然后你可以使用 .js 文件覆盖值。
    【解决方案2】:

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

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

    {
       "connector": "loopback-connector-mongodb",
       "url": "mongodb://localhost:27017/mydb" 
    }
    

    作为一种解决方法,您可以为 Heroku 编写一个部署后脚本,将 url 值替换为 process.env.MONGOLAB_URI 或 process.env.MONGOHQ_URL。

    sed -i.bak s/MONGODB_URL/$MONGOHQ_URL/g datasources.json
    

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

    【讨论】:

    • 谢谢 Raymond,url 属性是关键。我能够从 Heroku 文档生成 mongolab 连接 url:Getting your connection UR - 期待 LoopBack 对 env vars 的支持,但这暂时可以使用。谢谢。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2015-03-08
    • 2015-05-29
    • 2015-09-19
    • 2013-01-15
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多