2014-02-08 36 views
7

我正在使用LoopBack版本。 1.6,有一個本地的MongoDB服務器開發中使用運行他下面的數據源配置:如何配置StrongLoop LoopBack MongoDB數據源以部署到Heroku

"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的連接字符串?

回答

5

這是一個用於LoopBack的TODO,用於支持從環境變量和其他來源配置數據源/模型。一個想法是使用模板引擎加載datasources.json,以便它可以在運行時解析變量。

與您的問題相關,LoopBack允許您使用'url'屬性配置數據源。例如:

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

作爲一種變通方法,你可以寫一個部署後腳本的Heroku,以取代process.env.MONGOLAB_URI或process.env.MONGOHQ_URL的URL值。

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

同時,請在https://github.com/strongloop/loopback/issues處打開問題。

+0

謝謝Raymond,url屬性是關鍵。我能夠從Heroku文檔中生成mongolab連接URL:[獲得連接UR](https://devcenter.heroku.com/articles/mongolab#getting-your-connection-uri) - 期待LoopBack支持環境變量,但現在可以工作。謝謝。 – user2808320

7

這已經(爲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文件中的配置。

+1

我已經刪除了datasources.json並添加了一個datasources.local.js文件,如下所示: 'var postgresURI = process.env.DATABASE_URL; module.exports = { 分貝:{ defaultForType: '的PostgreSQL', 連接器: '的PostgreSQL', 網址:postgresURI } };' 在模型config.json我有 「數據源」:「數據庫「設置爲所有部分。 它引發以下錯誤:'用戶正在引用一個不存在的數據源:「db」'。我明白錯誤,但爲什麼它被拋出。我錯過了什麼? – Lee

+2

即使它是空的,您仍然需要datasources.json。 – mancvso

+2

我花了幾個小時才發現一個.js只是json配置的一個補充。所以json被加載,然後你可以使用.js文件來覆蓋值。 – Arne