अधिकांश समय, मैं इस तरह से परियोजना के रूट डायरेक्टरी में डेवलपमेंट एप्लिकेशन कॉन्फिगर को स्टोर करता हूं:
app
|-- config.json
लेकिन यह सबसे अच्छा तरीका प्रतीत नहीं होता है, क्योंकि यह कॉन्फ़िगरेशन समाप्त होता है संस्करण नियंत्रण प्रणाली में संग्रहीत किया जा रहा है - संभवतः जिसके परिणामस्वरूप उपयोगकर्ता नाम, पासवर्ड और अन्य संवेदनशील सामान लीक हुए हैं।
12 फैक्टर ऐप गाइड कॉन्फ़िगरेशन फ़ाइलों को पूरी तरह से छोड़ने और कॉन्फ़िगरेशन सेटअप के लिए पर्यावरण चर का उपयोग करने की सलाह देता है:
... पर्यावरण चर में विन्यास संग्रहीत करता है। Env var किसी भी कोड को बदले बिना deploys के बीच बदलना आसान है; कॉन्फिग फाइलों के विपरीत, गलती से कोड रेपो में उनकी जांच किए जाने की बहुत कम संभावना है; और कस्टम कॉन्फिग फाइलों के विपरीत, या जावा सिस्टम प्रॉपर्टीज जैसे अन्य कॉन्फिग मैकेनिज्म, वे एक भाषा हैं- और OS- एग्नोस्टिक स्टैंडर्ड।
यह मेरे लिए बहुत अच्छा लगता है, लेकिन एक स्टोर ने कहां कहा कि पर्यावरण चर, उन्हें स्रोत नियंत्रण में जाँच के बिना? और उन वेरिएबल्स को ऐप में पास करने के लिए मैं कौन से टूल का उपयोग कर सकता हूं? दर्जनों कॉन्फ़िगरेशन विकल्प हो सकते हैं, और हर बार जब आप ऐप लॉन्च करते हैं तो उन्हें टाइप करना अच्छा नहीं होता है - इसलिए उन्हें कहीं न कहीं किसी तरह की फ़ाइल में संग्रहीत करना होगा। इस प्रकार कहा गया फ़ाइल स्रोत नियंत्रण में समाप्त हो जाएगी, और हम वापस वहीं लौट आए जहाँ से हमने शुरुआत की थी।
क्या कॉन्फ़िगरेशन विकल्पों को संभालने का कुछ सार्वभौमिक रूप से स्वीकृत तरीका है, जिसमें स्थानीय कॉन्फ़िगरेशन को स्रोत नियंत्रण में संग्रहीत करने का जोखिम नहीं है?
.gitignore
जहां मैं उन फ़ाइलों या फ़ोल्डरों को परिभाषित कर सकता हूं जिन्हें संस्करण नियंत्रण में नहीं जांचना चाहिए। जैसा कि आप कहते हैं कि मैं नहीं देखता कि Env vars को वास्तव में कहाँ मदद करनी चाहिए, eith आपके पास उन्हें सेट करने के लिए एक स्क्रिप्ट है और इसे प्रोजेक्ट के साथ एक साथ संग्रहित किया जाना चाहिए या आपके सिस्टम (होम डायरेक्टरी या यहां तक कि मशीनों में) पर उन्हें 'कहीं' होना चाहिए स्क्रिप्ट) जो अपने आप में बहुत सारी समस्याएँ पैदा करता है, खासकर अगर बहुत सारे कॉन्फ़िगरेशन आवश्यक हैं। किसी भी स्थिति में मैं कॉन्फिग फाइलों को अलग कर दूंगा ताकि गोपनीय जानकारी अलग-अलग फाइलों में चली जाए।