2013-05-06 6 views
11

मैं Django सेटिंग्स में कुछ पर्यावरण चर पढ़ने के लिए प्रयास कर रहा हूं, जिसे मैंने /home/user/.bashrc (और बाद में /etc/bash.bashrc में परिभाषित किया है), लेकिन सभी मुझे एक KeyError अपवाद मिलता है। मुझे पता है कि मेरे पर्यावरण चर सेट हैं, क्योंकि मैं उन्हें टर्मिनल में प्रिंट कर सकता हूं (echo $ VAR_NAME)। यह तुच्छ होना चाहिए।Django सेटिंग्स फ़ाइल में पर्यावरण चर नहीं मिल सकता

यह वह कोड है जिसका मैं उपयोग कर रहा हूं।

from django.core.exceptions import ImproperlyConfigured 

msg = "Set the %s environment variable" 


def get_env_variable(var_name): 
    try: 
     return os.environ[var_name] 
    except KeyError: 
     error_msg = msg % var_name 
     raise ImproperlyConfigured(error_msg) 

OS_DB_USER = get_env_variable('MY_USER') 
OS_DB_PASS = get_env_variable('MY_PASS') 
OS_DB_DB = get_env_variable('MY_DB') 
OS_GAME_LOGS = get_env_variable('DIR_LOGS') 

मुझे बस यह नहीं पता कि क्या गुम है। वहाँ कोई सुझाव है?

धन्यवाद

संपादित करें: mod_wsgi साथ अपाचे पर चल रहा है।

+0

आप सर्वर कैसे चला रहे हैं? – Rohan

+0

मैं अपाचे पर mod_wsgi के साथ अपना प्रोजेक्ट चला रहा हूं। – luistm

+0

क्या इन्हें वर्चुअलहोस्ट फ़ाइल में परिभाषित किया जाना चाहिए? – luistm

उत्तर

1

मैं अभी हाल ही में इस अपने आप का कारण मिल गया है।

अपाचे/mod_wsgi के तहत चलते समय, आपका एप्लिकेशन किसी भिन्न उपयोगकर्ता के अंतर्गत चलता है, इसलिए उन पर्यावरण चर सेट नहीं होते हैं। आपके विकल्प हैं:

    अपने वर्चुअलहोस्ट config में
  1. उपयोग अपाचे setenv निर्देश,
  2. उपयोगकर्ता कि अपाचे के रूप में अपने कोड चलाता है के लिए वातावरण चर सेट करें, या
  3. बताएँ अपाचे अपने उपयोगकर्ता के रूप में wsgidaemon प्रक्रिया को चलाने के ।
+1

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

+1

सबसे आसान काम यह है कि WSGI स्क्रिप्ट फ़ाइल लोड होने के दुष्प्रभाव के रूप में किसी भी प्रक्रिया पर्यावरण चर सेट करना है। –

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