Strongloop 应用程序不加载本地数据源
Strongloop app does not load local datasource
我想在 Strongloop 应用程序中使用不同环境特定的数据源配置。我在 https://docs.strongloop.com/display/public/LB/Environment-specific+configuration 看到配置的优先级是:
- 环境特定配置,基于NODE_ENV的值;
例如,server/config.staging.json。
- 本地配置文件;
例如,server/config.local.json。
- 默认配置文件;
例如,server/config.json.
我已经声明了三个数据源配置文件:
datasources.json:
{}
数据源。local.json:
{
"db": {
"name": "db",
"connector": "loopback-connector-mongodb",
"host":"127.0.0.1",
"port": "27017",
"database": "woowDev"
}
}
和datasources.staging.js:
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'
}
};
现在除非我将数据源的配置放在 local.json 中 datasources.json 否则它不起作用。我不断收到错误消息:AssertionError: User is referencing a dataSource that does not exist: "db"
我也尝试将本地 conf 添加到暂存 conf 并定义变量 NODE_ENV,但它不会加载任何 datasource.staging.js。我通过以下方式定义了 NODE_ENV:
export NODE_ENV=staging
我使用 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);
}
}
}
如果主文件中未定义 "db"
键,即 datasources.json
.
,则不会合并配置
所以,我刚刚将 datasources.json
修改为:
{
"db": {}
}
成功了!
可能是我的错,文档不够清楚。
技巧是在datasources.json中添加所有数据源(memory/redis/mongo/postgres),然后覆盖datasources.local.js或datasources.staging.js或datasources.production.js[=12中的参数=]
示例文件配置:
datasources.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'
}
};
在这种情况下,Loopback 将覆盖数据库名称,同样您可以覆盖其他数据源参数,如端口和用户
我想在 Strongloop 应用程序中使用不同环境特定的数据源配置。我在 https://docs.strongloop.com/display/public/LB/Environment-specific+configuration 看到配置的优先级是:
- 环境特定配置,基于NODE_ENV的值; 例如,server/config.staging.json。
- 本地配置文件; 例如,server/config.local.json。
- 默认配置文件; 例如,server/config.json.
我已经声明了三个数据源配置文件: datasources.json:
{}
数据源。local.json:
{
"db": {
"name": "db",
"connector": "loopback-connector-mongodb",
"host":"127.0.0.1",
"port": "27017",
"database": "woowDev"
}
}
和datasources.staging.js:
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'
}
};
现在除非我将数据源的配置放在 local.json 中 datasources.json 否则它不起作用。我不断收到错误消息:AssertionError: User is referencing a dataSource that does not exist: "db"
我也尝试将本地 conf 添加到暂存 conf 并定义变量 NODE_ENV,但它不会加载任何 datasource.staging.js。我通过以下方式定义了 NODE_ENV:
export NODE_ENV=staging
我使用 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);
}
}
}
如果主文件中未定义 "db"
键,即 datasources.json
.
所以,我刚刚将 datasources.json
修改为:
{
"db": {}
}
成功了!
可能是我的错,文档不够清楚。
技巧是在datasources.json中添加所有数据源(memory/redis/mongo/postgres),然后覆盖datasources.local.js或datasources.staging.js或datasources.production.js[=12中的参数=]
示例文件配置:
datasources.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'
}
};
在这种情况下,Loopback 将覆盖数据库名称,同样您可以覆盖其他数据源参数,如端口和用户