2014-11-18 4 views
6

मुझे पता है कि इस मुद्दे पर पहले चर्चा की गई है, लेकिन मैं स्थानीय विकास और उत्पादन सर्वर के बीच कॉन्फ़िगरेशन के दृष्टिकोण के बारे में एक स्टारफायरवर्ड स्पष्टीकरण खोजने के लिए संघर्ष कर रहा हूं।पायथन ऐप कॉन्फ़िगरेशन सर्वोत्तम प्रथाओं

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

मैंने हाल ही में .ini फ़ाइलों का उपयोग करने के लिए पायथन कॉन्फ़िगरर लाइब्रेरी को अपनाया है। अब, मैं अपने कोड में

import ConfigParser 
config = ConfigParser.RawConfigParser() 
config.read(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'settings', 
                'my_app_config.ini'))) 
database_connect_string_admin = config.get('Database', 'admin_str') 

इस के साथ समस्याओं निम्नलिखित लाइनों है कई ...

  1. मैं हर फ़ाइल
  2. फ़ाइल नाम के शीर्ष पर आयात करने की जरूरत नहीं है my_app_config.ini बदल नहीं सकता इसलिए, मैं सामग्री.ini फ़ाइल के भीतर टिप्पणियों पर भरोसा करता हूं ताकि यह पता चल सके कि मैं किससे निपट रहा हूं। वे एक फ़ोल्डर ट्री में जमा हो जाती तो मैं जानता हूँ कि जो जो है।
  3. नोटिस कॉन्फ़िगरेशन फ़ाइल का पथ यहां परिभाषित किया गया है। तो, पेड़ संरचना में जहां पाइथन फ़ाइल रहता है, यह निर्धारित करता है कि मुझे एक प्रतिलिपि/पेस्ट त्रुटि मिलती है या नहीं।

मैंने प्रोग्राम की शुरुआत में पर्यावरण चर सेट करने की कोशिश की, लेकिन सभी मॉड्यूल के लिए सभी आयात कोड लॉन्च पर तुरंत किए जाते हैं। मुझे "नहीं मिला" त्रुटियां बाएं और दाएं मिल रही थीं।

मुझे क्या चाहिए: यह समझने के लिए कि एक ही स्थान पर संग्रहीत सभी कॉन्फ़िगरेशन को कैसे रखा जाए, जो मैं कर रहा हूं उसका ट्रैक खोना आसान नहीं है। मैं संस्करण नियंत्रण के तहत इन कॉन्फ़िगरेशन फ़ाइलों (आदर्श रूप से एक फ़ाइल या स्क्रिप्ट) को रखने का एक आसान तरीका चाहता हूं (सुरक्षा एक अन्य समस्या है, मैं digress)। मैं मूल संदर्भों स्विच करने में सक्षम होना चाहता हूँ (स्थानीय परीक्षण, स्थानीय उत्पादन, सेरवेरा-परीक्षण, सेरवेरा उत्पादन, ServerB-परीक्षण, ServerB उत्पादन) मेरे एप्लिकेशन का उपयोग करता है

  1. my_app_config.ini मेरी पार्सर द्वारा पढ़ा
  2. uwsgi.ini uwsgi आवेदन सर्वर सम्राट
  3. web_config.py कुप्पी आवेदन
  4. nginx.conf वेब सर्वर का कॉन्फ़िगरेशन
  5. celery विन्यास
  6. सांकेतिक रूप से लिंक के द्वारा प्रयोग किया द्वारा पढ़ा

सब कुछ (आदर्श जादू config हैंडलिंग जिन्न के भीतर नियंत्रित किया) के लिए अलग अलग रास्तों का उल्लेख नहीं। मुझे लगता है एक बार मैं यह पता लगा मैं शर्मिंदा यह इतना समझ समय लगा होगा।

पर्यावरण चर क्या मैं यहाँ क्या करने की कोशिश कर रहा हूँ कर रहे हैं?

उत्तर

1

आप simple settings कोशिश करने के लिए है। यह आपके सभी मुद्दों को हल करेगा।एक तरह से सेट वातावरण चर

विकास

$ export SIMPLE_SETTINGS=settings.general,settings.development 
$ python app.py 

में उत्पादन

$ export SIMPLE_SETTINGS=settings.general,settings.production 
$ python app.py 

आप development.py रखने के लिए और सुरक्षा कारणों के लिए भंडार में नहीं production.py सकते हैं।

उदाहरण

सेटिंग्स/general.py

SIMPLE_CONF = 'simple' 

app.py

from simple_settings import settings 

print(settings.SIMPLE_CONF) 

प्रलेखन कई और अधिक विशेषताएं और लाभ का संकेत मिला।

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