2012-06-25 13 views
35

जब उल्का अनुप्रयोग विकास, परीक्षण या उत्पादन वातावरण के रूप में चलता है तो मुझे विभिन्न खातों के प्रदाता की कॉन्फ़िगरेशन का उपयोग करने की आवश्यकता होती है।एक उल्का आवेदन कैसे जानता है कि यह विकास, परीक्षण या उत्पादन पर्यावरण पर चल रहा है?

+1

आसानी से सर्वर साइड पर Meteor.startup समारोह में एक स्विच बयान जोड़कर हासिल की। नीचे मेरा विस्तृत उत्तर देखें। – FullStack

उत्तर

0

एक इस

https://github.com/possibilities/meteor-environment-hooks

टिप्पणी पूरा करने के लिए वास्तव में गंदा तरीका: इंटरफ़ेस ठीक IMHO, कार्यान्वयन गंदा

+0

यह केवल सबसे बुनियादी परिस्थितियों के लिए उपयुक्त है और यदि आप अपनी स्थानीय मशीन पर पूर्ण तैनाती किए बिना अपने एनवी का परीक्षण करना चाहते हैं तो काम नहीं करेगा। –

+0

हाँ, निश्चित रूप से एक स्टॉप अंतर। हालांकि बुनियादी परिस्थितियों में काम करता है। मैं इसे नई ऑथ सिस्टम के लिए उचित रूप से एपीआई आईडी सेट करने के लिए उपयोग करता हूं लेकिन मैं इसे बेहतर समाधान के साथ बदलने के लिए उत्सुक हूं। –

1

है वहाँ एक खुला pull request GitHub पर जो उस के लिए अनुमति होगी है। टिप्पणी/इसके लिए वोट दें, इसलिए इसमें शामिल होने की अधिक संभावना है!

18

आप जब meteor run या meteor deploy चल Meteor.settings इस्तेमाल किया --settings विकल्प के साथ मिलकर उपयोग कर सकते हैं।

उदाहरण के लिए, dev मोड में चलाने के लिए, एक JSON फ़ाइल बनाने के लिए, यह meteorConfigDev.json कहते हैं, और उस में निम्नलिखित डाल:

{ 
    "public" : { 
    "mode" : "dev" 
    }, 
    "anotherProperty" : "anotherValue" 
} 

उपयोग करके आपके एप्लिकेशन चलाने

meteor --settings meteorConfigDev.json 

पर सर्वर और क्लाइंट पर आप "मोड" का उपयोग कर सकते हैं:

Meteor.settings.public.mode //in this case it will be "dev" 

नोट करें कि सेट करें "सार्वजनिक" में टिंग सर्वर और क्लाइंट दोनों पर उपलब्ध हैं जबकि बाकी सब कुछ (इस मामले में "एक और प्रॉपर्टी") केवल सर्वर पर उपलब्ध है।

फिर आपके अलग-अलग वातावरण के लिए अलग-अलग कॉन्फ़िगरेशन फ़ाइलें हो सकती हैं।

30

सर्वर पर:

var inDevelopment = function() { 
    return process.env.NODE_ENV === "development"; 
}; 

var inProduction = function() { 
    return process.env.NODE_ENV === "production"; 
}; 

उल्का वातावरण चर NODE_ENV जब आप meteor चलाने "विकास" करने के लिए सेट करता है। उत्पादन में, आप वैरिएबल को जो भी चाहें सेट कर सकते हैं, अन्यथा यह "उत्पादन" के लिए डिफ़ॉल्ट होगा।

अद्यतन: मैंने क्लाइंट और सर्वर पर काम करने की अनुमति देने के लिए एक स्मार्ट पैकेज बनाया है।

mrt add allow-env 

बस एक सर्वर फ़ाइल में अनुमति नियम सेट करें।

allowEnv({ 
NODE_ENV: 1 
}); 
+1

यह मेरे लिए काम नहीं करता है, क्योंकि मेरा ऐप स्वयं-होस्ट किया गया है और जब मैं अपना एप लॉन्च करता हूं "उल्का रन - प्रोडक्शन" उल्का के माध्यम से अभी भी प्रक्रिया "env.NODE_ENV "विकास" को सेट करता है (तर्कसंगत नहीं लगता है, लेकिन उनके पास resons - लिंक देखें)। यह वर्षों के लिए एक ज्ञात मुद्दा है और उदा। यहां चर्चा की गई: https://github.com/meteor/meteor/issues/1858। – DerWOK

+0

"अन्यथा यह" उत्पादन "के लिए डिफ़ॉल्ट होगा: क्या यह होस्ट नहीं करता है कि आप होस्ट करने के लिए किस उपकरण का उपयोग करते हैं/आप किस उपकरण का उपयोग करते हैं? –

4

बहुत आसान। मैं अपने ऐप को पांच (हां, पांच!) विभिन्न वातावरण पर चला रहा हूं। मैं बस चार अलग-अलग वातावरणों के लिए नीचे दिखाए गए ROOT_URL पर एक स्विच स्टेटमेंट का उपयोग करता हूं। बेशक, यदि आप केवल दो वातावरण हैं तो आप एक if-else का उपयोग कर सकते हैं। सर्वर पर काम करता है। बस startup.js नामक एक नई फ़ाइल बनाएं और नीचे दिए गए कोड उदाहरण का उपयोग करें। चीयर्स! ध्यान दें कि उल्का अब Meteor.absoluteUrl() प्रदान करता है, जो अतिरिक्त कार्यक्षमता के अलावा process.env.ROOT_URL के समान है:

switch (process.env.ROOT_URL) { 
    case "http://www.production.com/": 
     BLOCK OF CODE HERE 
     break; 
    case "http://www.staging.com/": 
     BLOCK OF CODE HERE 
     break; 
    case "http://www.development.com/": 
     BLOCK OF CODE HERE 
     break; 
    case "http://localhost:3000/": 
     BLOCK OF CODE HERE 
     break; 
} 

सामान्य में, जावास्क्रिप्ट में एक स्विच बयान के लिए प्रारूप

switch(expression) { 
    case n: 
     code block 
     break; 
    case n: 
     code block 
     break; 
    default: 
     default code block 
} 

अद्यतन है। docs देखें।

+0

मैंने इसी तरह के कोड के कारण कई ऐप्स तोड़ने को देखा है। यह कोड आपकी कार्यक्षमता को इस पर निर्भर करता है संपत्ति जो पर्यावरण (यूआरएल) से स्वतंत्र है। यदि यूआरएल बदल गया है, तो कार्यक्षमता संभावित रूप से कोई भी ध्यान देने योग्य नहीं हो सकती है। अगर आप यूआरएल को बदलना चाहते हैं तो आपको अपने कोड में एक स्थान और भी बदलना होगा (या दूसरा जोड़ें एक), जो आप कुछ महीनों में भूल गए होंगे। आपके पर्यावरण पर निर्भर कार्यक्षमता अक्सर आपके ऐप के लिए महत्वपूर्ण होती है, साफ-सफाई की जांच करना आसान नहीं होता है और अच्छी तरह से देखभाल नहीं की जाती है, इसलिए आपको अतिरिक्त सावधान रहना होगा। – opyh

+0

@opyh : "एक्स कैसे पता चलता है कि वाई पर चलता है?" एक प्रश्न है जो पर्यावरण से सवाल करता है। पर्यावरण का निरीक्षण किए बिना आप इसका जवाब कैसे दे सकते हैं NT? ऐसे उत्तर दायरे से बाहर होंगे। यह मेरे अनुभव में कभी नहीं टूटा है; इसलिए, ऐसा लगता है कि आपको कुछ उदाहरणों और बेहतर समाधान के साथ आने की आवश्यकता होगी यदि आप इतने आश्वस्त हैं कि यह गलत है। –

+2

मैंने आपके 'env' का निरीक्षण करने के खिलाफ सलाह नहीं दी थी, लेकिन आपको यूआरएल से अपने पर्यावरण का अनुमान नहीं लगाया जाना चाहिए, क्योंकि यूआरएल विभिन्न कारणों से आपके पर्यावरण से स्वतंत्र रूप से बदल सकता है। यदि आपके साथी सहकर्मी को यह नहीं पता है कि आपके ROOT_URL में आपके ऐप तर्क के लिए 'जादू' अतिरिक्त अर्थ है, तो 3 यथार्थवादी मामले हैं जो आपके ऐप को उत्पादन पर तोड़ देंगे: 1) 'www.', 2) को हटाएं 'http' से' https', 3) में आपके यूआरएल से जुड़े कई यूआरएल हैं और डिफ़ॉल्ट यूआरएल बदलते हैं। यह भी [DRY] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) सिद्धांत के खिलाफ है। – opyh

47

उल्का 1.3 चूंकि इन झंडे बॉक्स से बाहर काम करते हैं:

Meteor.isDevelopment 
Meteor.isProduction 
Meteor.isTest 
Meteor.isAppTest 
+2

इसे स्वीकार्य उत्तर होना चाहिए। –

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