2011-01-12 13 views
7

पृष्ठभूमि:
चरण 1 -> हम एक बॉक्स है कि एक विशिष्ट विन्यास के साथ परीक्षण मोड में यह चलाकर इकाई और एक आवेदन के कार्यात्मक परीक्षण चलाता है।
चरण 2 -> चरण 1 की सफलता पर, हम किसी अन्य बॉक्स में विभिन्न कॉन्फ़िगरेशन सेट के साथ परीक्षण मोड में इसे चलाकर एप्लिकेशन के एकीकरण परीक्षण चलाते हैं।
चरण 3 -> चरण 2 की सफलता पर, हम प्रदर्शन परीक्षण बॉक्स में उत्पादन मोड में इसे चलाकर एप्लिकेशन के प्रदर्शन परीक्षण चलाते हैं।
चरण 4 -> चरण 3 की सफलता पर, बिल्ड को स्थिर माना जाता है और यूएटी बॉक्स को उस कोड बेस के साथ अपडेट किया जाता है और ग्राहक समीक्षा और प्रतिक्रिया के लिए एप्लिकेशन उत्पादन मोड में चलाया जाता है। चरण 5 -> ग्राहक से जाओ के साथ, उत्पादन बॉक्स को कोड बेस के साथ अपडेट किया गया है।पर्यावरण चर या YAML config फ़ाइलों

अब, ऊपर दिए गए चरणों से हम देखते हैं कि चरण 1 और 2 में, जबकि अनुप्रयोग परीक्षण मोड में चलता है, इसमें अलग-अलग कॉन्फ़िगरेशन होते हैं। चरण 3,4 और 5.

ऐसी स्थितियों में, अनुशंसित अभ्यास क्या है? हमारे पास वाईएएमएल कॉन्फ़िगरेशन फाइलें थीं, लेकिन व्यक्तिगत रूप से मुझे लगा कि कई कॉन्फ़िगरेशन फ़ाइलों को बनाए रखना समझ में नहीं आता है। और इसलिए, मैं
को
"पर्यावरण प्रति कॉन्फ़िग फ़ाइल"
के अभ्यास से बदल "रेल मोड प्रति कॉन्फ़िग फ़ाइल, लिनक्स पर्यावरण के लिए चर externalizing"

क्या मैं सही रास्ते पर हूं? क्या मेरी कार्रवाई नहीं है, चीजों को सरल बनाएं?

इन दो दृष्टिकोणों के पेशेवरों और विपक्ष क्या हैं?

उत्तर

11

मेरे अनुभव में, पर्यावरण चर अंतिम-रिज़ॉर्ट का कॉन्फ़िगरेशन विकल्प हैं।वे पूरी तरह से अपनी जगह है, लेकिन अनुप्रयोगों को आम तौर पर पहले कुछ और अधिक भरोसेमंद और स्पष्ट रूप से जानबूझकर विन्यास विकल्प की जांच करनी चाहिए। मैं अत्यधिक YAML फ़ाइल से कॉन्फ़िगरेशन लोड करने की अनुशंसा करता हूं और केवल एक फॉलबैक के रूप में एक पर्यावरण चर का उपयोग करता हूं। हमेशा मान लें कि आपका पर्यावरण परिवर्तक सिस्टम-व्यापी पर लागू होने जा रहा है और मान लें कि यह गलती से अनसेट हो जाएगा या किसी बिंदु पर गलत मान पर सेट हो जाएगा। यानी, आपके ऐप को सेप्पुकु नहीं करना चाहिए क्योंकि कुछ कॉन्फ़िगरेशन निर्देशिका / पर सेट हो गई है और इसमें इसकी अनुमति नहीं है (या इससे भी बदतर आप अपना ड्राइव मिटा दें क्योंकि ऐप root के रूप में चलाया गया है)। या अधिक संभावना है, आपके RAILS_ENV की तरह कुछ test पर सेट किया गया था जब यह production होना चाहिए था और कोई भी एहसास नहीं हुआ था और अब उपयोगकर्ता गलत जगह पर डेटा लिख ​​रहे हैं या सभी 500s के कारण /dev/null पर हैं।

व्यक्तिगत रूप से, मैं किसी भी समय कॉन्फ़िगरेशन मान के लिए एक पर्यावरण परिवर्तक पर फ़ॉलबैक logger.warn संदेश छोड़ना पसंद करता हूं।

आपके सटीक मुद्दे के साथ, ईमानदारी से, मैं शायद कॉन्फ़िगरेशन मान में गुजरता हूं जिसके लिए कमांड लाइन पर वातावरण शुरू होता है।

+0

धन्यवाद। यह आपके बयान पर आधारित है कि ऐप कॉन्फ़िगरेशन के लिए पर्यावरण चर अंतिम उपाय है, और ऐप कॉन्फ़िगरेशन लोड करने के लिए वाईएएमएल फ़ाइल का उपयोग करने की आपकी सलाह है, मैं उस डिज़ाइन के साथ आया हूं जिसे मैंने अपनी पोस्ट में ब्लॉग किया है। आपके जवाब ने समाधान प्राप्त करने के लिए अपने जुनून को दोगुना कर दिया। फिर से धन्यवाद! – karthiks

+0

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

0

मेरी कंपनी में, वास्तव में हम दोनों एक तरह से हैं।

हमारे पास एक रेल ऐप है जो सॉफ़्टवेयर के किसी अन्य भाग के कई अलग-अलग इंस्टॉलेशन में से एक पर इंगित कर सकता है और उस इंस्टॉलेशन से API का उपयोग कर सकता है। स्थापना निर्दिष्ट करने के लिए, लगभग 5 चर सेट करने की आवश्यकता है।

हमारे पास इनमें से प्रत्येक चर अलग वातावरण चर के रूप में था, लेकिन उन सभी को सेट करना वास्तव में पुराना हो गया और हम अनिवार्य रूप से भूल गए।

तो अब हमारे पास एक पर्यावरण चर है जिसे हम ENV_TOKEN पर कॉल कर रहे हैं और हमारे पास yaml फ़ाइलें हैं जिनमें वैध ENV_TOKEN चर के अनुरूप प्रविष्टियां हैं, और कॉन्फ़िगर/प्रारंभकर्ताओं में कोड जो ENV [key] = value सेट करता है।

तो मान लें कि मेरे पास "खाद्य" और "बार" चर हैं जो मैं क्रमशः "एक" और "दो" पर सेट करना चाहता हूं। मुझे लगता है कि होता है एक YAML फ़ाइल बना सकते हैं:

carolclarinet: 
    FOO: one 
    BAR: two 

और फिर मैं carolclarinet करने और FOO और बार एक और दो के लिए तैयार हो जाओ मेरी वातावरण चर ENV_TOKEN स्थापित करेगा।

मुझे नहीं पता कि यह करने का यह सबसे अच्छा तरीका है, लेकिन यह हमारे लिए काम करता है।

ईटीए: ध्यान दें कि यह केवल विकास और परीक्षण के लिए है, हमारे सॉफ़्टवेयर के इंस्टॉलर यह सब स्थापित करने का ख्याल रखते हैं ताकि हमारे ग्राहक कभी भी पर्यावरण चर बदल सकें।

+0

मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है या नहीं, लेकिन यह निश्चित रूप से एक सुधार है। –

0

व्यर्थ में बहुत सारे गुगलिंग के बाद, कुछ रेल लोगों और कुछ दिमाग के साथ चर्चाएं, मैंने कोड में बदलाव किए हैं जैसे कि मेरे पास है "प्रति पंक्ति मोड में एक कॉन्फ़िगर फ़ाइल, एक yml फ़ाइल में अनुप्रयोग कॉन्फ़िगरेशन को बाहरी करना, जो मेरे मामले में रेल वातावरण के बाहर रहता है "इसके बारे में

अधिक जानकारी http://bit.ly/hpChwl

पर अपने ब्लॉग पोस्ट में पाया जा सकता है कि आप सभी अपने विचारों को साझा करने के लिए धन्यवाद। आशा है कि मेरे समाधान में आप सभी का हित होगा :)

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