2016-02-12 8 views
10

लोड नहीं करता है, मैं स्ट्रॉन्ग्लोप ऐप में विभिन्न पर्यावरण विशिष्ट डेटासोर्स कॉन्फ़िगरेशन का उपयोग करना चाहता हूं। मैं https://docs.strongloop.com/display/public/LB/Environment-specific+configuration पर देखा कि विन्यास की प्राथमिकता हैं:स्ट्रॉन्ग्लोप ऐप स्थानीय डेटासोर्स

  1. पर्यावरण-विशिष्ट विन्यास, NODE_ENV के मूल्य के आधार; उदाहरण के लिए, सर्वर/config.staging.json।
  2. स्थानीय कॉन्फ़िगरेशन फ़ाइल; उदाहरण के लिए, सर्वर/config.local.json।
  3. डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल; उदाहरण के लिए , सर्वर/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:

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 को जोड़ने और परिवर्तनीय NODE_ENV को परिभाषित करने के लिए भी स्थानीय conf जोड़ने की कोशिश की, लेकिन यह न तो 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); 
    } 
    } 
} 

कॉन्फ़िगरेशन मर्ज नहीं होगा अगर "db" कुंजी मास्टर फ़ाइल अर्थात datasources.json में परिभाषित नहीं है।

तो, मैं तो बस संशोधित datasources.json रहे हैं:

{ 
    "db": {} 
} 

और यह काम किया!

शायद यह मेरी गलती है लेकिन दस्तावेज़ीकरण पर्याप्त स्पष्ट नहीं है।

+2

यह वास्तव में स्पष्ट जिस तरह से यह दस्तावेज में लिखा है नहीं है, लेकिन वास्तव में आप केवल मानदंडों को ओवरराइड कर सकते हैं, न उन्हें वैकल्पिक कॉन्फ़िगरेशन में बनाने 'आप ** ** मानों ** config में स्थापित कर रहे हैं ** ओवरराइड कर सकते हैं। में 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

चाल datasources.local.js या datasources.staging.js या datasources.production.js

में पैरामीटर datasources.json में सभी datasources (स्मृति/redis/मोंगो/postgres) जोड़ने और फिर ओवरराइड करने के लिए है नमूना फ़ाइल कॉन्फ़िगरेशन:

डेटा स्रोत।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' 
    } 
}; 

लूपबैक इस मामले में डेटाबेस नाम को पार कर जाएगी इसी तरह आप बंदरगाह और उपयोगकर्ता

संबंधित मुद्दे