2010-11-08 11 views
6

मान लें कि आप सेटिंग फ़ाइल के लिए स्रोत कोड दिखाना चाहते हैं लेकिन सार्वजनिक स्रोत कोड में 3-4 लाइनों को दिखाना नहीं चाहते हैं। क्या आप बस उन चरों को मैन्युअल रूप से प्रतिस्थापित करते हैं या क्या आपके द्वारा उपयोग की जाने वाली कुछ चालें हैं, जैसे कि उन्हें एक और अलग फ़ाइल में शामिल करना और मुख्य conf में शामिल हैं?आप सार्वजनिक रूप से ब्राउज़ करने योग्य स्रोत कोड से प्रमाण-पत्र रखने के लिए कैसे प्रबंधित करते हैं?

या रिपो में उस फ़ाइल को ट्रैक न करने और शामिल करने के लिए यह अधिक आम है?

उत्तर

6

जिस तरह से मैं इस समस्या से निपटता हूं, और मुझे लगभग हर परियोजना में इसका सामना करना पड़ता है, मैं किसी से चुने गए पैटर्न का उपयोग कर रहा हूं। इस पैटर्न में - जिसका उपयोग केवल क्रेडेंशियल्स को संस्करण नियंत्रण में नहीं होने के कारण ही किया जा सकता है बल्कि पर्यावरण/प्लेटफार्म विशिष्ट सेटिंग्स को अलग करने के लिए भी किया जा सकता है - मुख्य सेटिंग्स फ़ाइल, जो संस्करण नियंत्रण में है, एक माध्यमिक सेटिंग्स फ़ाइल आयात करती है जो उपयुक्त है "local_settings" कहा जाता है। यह "local_settings" फ़ाइल संस्करण नियंत्रण के तहत नहीं रखी गई है, और प्रत्येक मंच के लिए जिस पर स्रोत तैनात किया गया है, एक अलग, विशिष्ट स्थानीय_सेटिंग फ़ाइल केवल उस प्लेटफ़ॉर्म के अनुरूप बनाई गई है।

मैं आपको एक उदाहरण दूंगा कि मैं आमतौर पर अपने Django/पायथन परियोजनाओं के लिए यह कैसे करता हूं। एक केंद्रीय, प्रति-परियोजना settings.py फ़ाइल है, जो संस्करण नियंत्रण में है, और एक मंच (शायद प्लेटफ़ॉर्म यहां उपयोग करने के लिए बिल्कुल सही शब्दावली नहीं है) विशिष्ट local_settings.py फ़ाइल। local_settings.py फ़ाइल settings.py फ़ाइल है, जहां विभिन्न सेटिंग चर निम्नलिखित तरीके से परिभाषित कर रहे हैं के भीतर से आयात किया जाता है:

import local_settings 

DATABASE_USER = local_settings.db_user 
DATABASE_PASSWORD = local_settings.db_pass 

और इसके बाद के संस्करण का टुकड़ा के साथ जाने के लिए एक उदाहरण के रूप में, local_settings.py फ़ाइल इस प्रकार परिभाषित किया गया है:

db_user = 'user' 
db_pass = 'pass' 

मुझे वास्तव में अच्छी तरह से काम करने के लिए इस मुद्दे से निपटने के दौरान इस पैटर्न को मिला है।

+0

यह एक बहुत अच्छी तकनीक की तरह लगता है, मैं इसका उपयोग शुरू कर रहा हूँ। क्या आप 'local_settings.py' स्रोत कोड का उदाहरण प्रदान करना चाहते हैं? –

+0

स्रोत नियंत्रण में अपने Django settings.py के नीचे आप यह करते हैं: कोशिश करें: सेटिंग्स_लोकल आयात से * आयात त्रुटि को छोड़कर: पास –

+0

हे स्पाइक। मेरा मानना ​​है कि इस मामले में 'local_settings.py' फ़ाइल गुम है, आमतौर पर अनुपलब्ध फ़ाइल/मॉड्यूल बबल अप आयात करने के कारण अपवाद को छोड़ना एक अच्छा विचार है ताकि परियोजना को स्थापित करने वाला व्यक्ति बिल्कुल जानता हो क्या हो रहा है। – ayaz

4

यह संदर्भ पर निर्भर करता है, लेकिन एक सामान्य समाधान application.cfg.sample है जिसमें कोई संवेदनशील जानकारी नहीं है। यह फ़ाइल भंडार में है, आदि। जब आप वास्तव में एप्लिकेशन को तैनात करते हैं, तो आप उस फ़ाइल को application.cfg पर कॉपी करते हैं और पासवर्ड में संपादित करते हैं, आदि

एक और तरीका उदाहरण मानों को आपके विकास के लिए काम करने देना है, लेकिन अर्थहीन होना अर्थात:

host: localhost 
username: user 
password: test 

यह वास्तव में एक वैध डेटाबेस खाते या जो कुछ भी अपने विकास कार्य केंद्र पर हो सकता है, लेकिन एक उपयोगकर्ता मान नहीं होता है कि यह और जानकारी शायद ही संवेदनशील है।

3

बस उदाहरणों के साथ चर को प्रतिस्थापित करें।

SETTINGS = { 
    username: 'test', 
    password: 'mypass' 
} 

आदि

+0

क्या होगा यदि आपके पास स्थानीय प्रतिलिपि है जिसे आप उत्पादन सर्वर पर दबाते हैं? यदि आपने हाल ही में अपडेट किए हैं तो क्या आप सब कुछ पुश करते हैं लेकिन सेटिंग फाइलें? या क्या होगा यदि आपने अपने स्थानीय भंडार में एक सेटिंग जोड़ा जो आवश्यक है जब आप इसे रिमोट पर दबाएंगे? –

+0

1) हाँ, मैं चाहता था। 2) उस चर के लिए भी एक डमी सेटिंग जोड़ें। यदि आप स्वयं को बहुत सारी नई सेटिंग्स जोड़ते हैं, तो शायद आपने इसे बहुत अच्छी तरह से डिजाइन नहीं किया है। –

2

आप कर सकते थे या तो, में फ़ाइल की जाँच नहीं करता है, तो इसका केवल एक स्थानीय विन्यास के लिए एक वैध सेटिंग वहाँ वास्तव में सार्वजनिक स्रोत कोड में शामिल या स्मार्ट बात करने के लिए कोई मतलब नहीं है और जानकारी एन्क्रिप्ट करें (एएसपी सेटिंग्स फ़ाइल के मामले में)।

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

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