2016-02-12 2 views
10

Я хочу использовать различные конфигурации источников данных в приложении Strongloop. Я видел в https://docs.strongloop.com/display/public/LB/Environment-specific+configuration, что приоритет конфигураций:Приложение Strongloop не загружает локальный источник данных

  1. Environment-специфическая конфигурация, на основе стоимости NODE_ENV; например, server/config.staging.json.
  2. Локальный файл конфигурации; например, server/config.local.json.
  3. Файл конфигурации по умолчанию; например, server/config.json.

Я объявившие три DataSource конф файлы: datasources.json:

{} 

datasources.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' 
    } 
}; 

Теперь, если я не задал конфигурацию datasources.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 
+0

Хм ... что если вы удалите в противном случае пустой файл 'datasources.json'? – jakerella

+0

пробовал, не работает, что еще я могу попробовать? – Sanandrea

+0

Возможно ли, что ваша текущая среда на самом деле 'staging'? Я вижу, что ваш исходный конфигурационный файл datasource * не имеет свойства '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); 
    } 
    } 
} 

не сольется конфиги, если "db" ключ не определен в главном файле т.е. datasources.json.

Итак, я модернизировал datasources.json к:

{ 
    "db": {} 
} 

и это сработало!

Возможно, это моя ошибка, но документация недостаточно ясна.

+2

На самом деле это не так, как написано в документации, но вы можете только переопределять параметры, а не создавать их в альтернативных конфигурациях. 'Вы можете ** переопределить ** значения **, установленные ** в config. json in: 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/MONGO/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' 
    } 
}; 

Loopback переопределяет имя базы данных в этом случае так же вы можете изменить другие параметры, такие как DataSource порт и пользователь

Смежные вопросы