2016-02-12 68 views
10

我想在Strongloop应用程序中使用不同的环境特定数据源配置。我在https://docs.strongloop.com/display/public/LB/Environment-specific+configuration看到配置的优先级是:Strongloop应用程序不会加载本地数据源

  1. 环境特定的配置,基于NODE_ENV的价值;例如, ,server/config.staging.json。
  2. 本地配置文件;例如, ,server/config.local.json。
  3. 默认配置文件;例如, ,server/config.json。

我已经声明了三个数据源conf文件: datasources.json

{} 

datasources.local.json

{ 
    "db": { 
    "name": "db", 
    "connector": "loopback-connector-mongodb", 
    "host":"127.0.0.1", 
    "port": "27017", 
    "database": "woowDev" 
    } 
} 

datasources.staging.js

012现在
module.exports = { 
    db: { 
    connector: 'mongodb', 
    hostname: process.env.OPENSHIFT_MONGODB_DB_HOST, 
    port: process.env.OPENSHIFT_MONGODB_DB_PORT, 
    user: process.env.OPENSHIFT_MONGODB_DB_USERNAME, 
    password: process.env.OPENSHIFT_MONGODB_DB_PASSWORD, 
    database: 'woow' 
    } 
}; 

,除非我把datasources.local.json的配置datasources.json这是行不通的。我不断收到错误:AssertionError: User is referencing a dataSource that does not exist: "db"

我也尝试将本地conf添加到staging conf并定义变量NODE_ENV,但它不会加载datasource.staging.js。我做定义的NODE_ENV:

export NODE_ENV=staging 
+0

嗯......什么如果你删除了空的'datasources.json'文件? – jakerella

+0

尝试过,不起作用,我还能尝试什么? – Sanandrea

+0

你现在的环境可能是“升级”吗?我看到你的暂存数据源配置文件*在定义中没有'name'属性。无论如何,这将需要。 – jakerella

回答

9

我用node-debug追查问题。它排在这个特定的源文件strongloop:

node_modules/loopback-boot/lib/config-loader.js 

功能:

function mergeDataSourceConfig(target, config, fileName) { 
    for (var ds in target) { 
    var err = applyCustomConfig(target[ds], config[ds]); 
    if (err) { 
     throw new Error('Cannot apply ' + fileName + ' to `' + ds + '`: ' + err); 
    } 
    } 
} 

不会合并CONFIGS如果"db"键没有主文件即datasources.json定义。

所以,我只是修改了datasources.json到:

{ 
    "db": {} 
} 

和它的工作!

也许这是我的错,但文档是不够清晰。

+2

它在文档中的写法并不明显,但实际上只能覆盖参数,不能在替代配置中创建它们。 '您可以**覆盖配置中的** set **值。 json在:config.local.js或config.local.json config.env.js或config.env.json,其中env是NODE_ENV的值 – Overdrivr

+0

是的你是对的!这显然是我的错:) – Sanandrea

+0

我不太确定,这是确切的情况 - 我在'config.local.js'中指定了一个端口,但不是在'config.json'中,并且该应用程序在预期的端口上启动。 – emc

0

诀窍是添加所有的数据源(存储器/ redis的/蒙戈/ postgres的)在datasources.json,然后覆盖参数datasources.local.js或datasources.staging.js或datasources.production.js

示例配置文件:

数据源。JSON

{ 
    "db": { 
    "name": "db", 
    "connector": "memory" 
    }, 
    "redisDS": { 
    "name": "redisDS", 
    "connector": "redis" 
    }, 
    "testPostgress": { 
    "port": 5432, 
    "name": "localPostgress", 
    "user": "akumar", 
    "connector": "postgresql" 
    } 
} 

datasources.staging.js

module.exports = { 
    db:{ 
    connector: 'memory' 
    }, 
    redisDS:{ 
    connector: 'redis' 
    }, 
    testPostgress:{ 
    database:'stagingPostgress' 
    } 
}; 

环路将在此情况下,覆盖数据库名称同样可以覆盖其他数据源参数,如端口,用户

相关问题