2016-08-04 10 views
6

मैं निम्नलिखित अपाचे विन्यास के साथ एक छोटे से Django परियोजना सेवा करने के लिए कोशिश कर रहा हूँ:अपाचे कोई मॉड्यूल 'Django' नाम

अपाचे वर्चुअलहोस्ट विन्यास:

<VirtualHost *> 
    ServerName servername 

    [...] 

    <Directory "/path/to/project/project"> 
     <Files wsgi.py> 
      Require all granted 
     </Files> 
    </Directory> 

    WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages       
    WSGIScriptAlias//path/to/project/project/wsgi.py 

</VirtualHost> 

मेरे पास निम्नलिखित wsgi.py:

import os 
from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings") 
application = get_wsgi_application() 

मुझे स्टेटिक फ़ाइलों और मीडिया फ़ाइलों को प्रस्तुत करने में कोई समस्या नहीं है।

मैंने अनुमतियों की भी जांच की और 755 का उपयोग करने की कोशिश की, फिर 777 मेरी वर्चुअलनेव की साइट-पैकेज निर्देशिका में। यह काम नहीं किया।

लेकिन जब मेरी साइट के रूट मैं निम्नलिखित मिल तक पहुँचने की कोशिश:

from django.core.wsgi import get_wsgi_application 
ImportError: No module named 'django' 

मैं अनुमान लगाया है कि यह एक पायथन पथ संबंधित समस्या थी के बाद से Django मेरी virtualenv में स्थापित किया गया है। लेकिन मैंने WSGIDaemonProcess के python-path विशेषता के लिए प्रासंगिक पायथन पथ जोड़े, इसलिए मुझे नहीं पता कि यह क्यों काम नहीं करता है।

मुझे यह भी लगता है कि मैं add the relevant directory to my Python path in my wsgi.py by using the site module कर सकता हूं, लेकिन मुझे समझना है कि अपाचे कॉन्फ़िगरेशन मैंने क्यों प्रयास किया है पर्याप्त नहीं है। क्या मैं कुछ भुल गया?

उत्तर

15

आप WSGIProcessGroupWSGIScriptAlias पर निर्देश या समकक्ष विकल्प खो रहे हैं, इसलिए आपका एप्लिकेशन वास्तव में उस डेमॉन प्रक्रिया समूह में नहीं चल रहा है जहां आपने वर्चुअल वातावरण सेट किया है।

देखें Using mod_wsgi daemon mode

मैं भी सुनिश्चित आवेदन समूह के लिए निर्धारित है की सिफारिश करेंगे '% {वैश्विक}' अगर है कि केवल आवेदन आप डेमॉन प्रक्रिया समूह में चल रहे हैं है।

इस प्रकार का उपयोग करें:

WSGIScriptAlias//path/to/project/project/wsgi.py \ 
    process-group=project application-group=%{GLOBAL} 

इसके अलावा बेहतर आभासी पर्यावरण के लिए python-home उपयोग करने के लिए।

WSGIDaemonProcess project python-path=/path/to/project \ 
     python-home=/path/to/Envs/venv 

देखें:

2

मेरे प्रतिनिधि नहीं 50 से अधिक है तो मैं टिप्पणी नहीं कर सकता, लेकिन मैं अपने खोज साझा करना चाहते हैं।

WSGIDaemonProcess में, यदि आप अजगर 3.5 का उपयोग कर रहे हैं, तो आप

python-home=/path/to/Envs/venv 

स्पष्ट रूप से सेट के साथ, बिल्कुल के रूप में @ ग्राहम-dumpleton कहना सेट करना होगा।

हालांकि, यदि आप पाइथन 3.4 (या कुछ पुराने संस्करण पायथन जैसे 2 का उपयोग कर रहे हैं।7 के रूप में तक मुझे पता है), तो आप

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages 

के रूप में यह कॉन्फ़िगर करने के लिए की तरह क्या प्रश्नकर्ता किया होगा।

वास्तव में अजीब।

+1

यदि पायथन 3.4 या 2.7 का उपयोग करना है, तो आपको अभी भी 'पायथन-होम'' का उपयोग करना चाहिए। मुझे 'पायथन-पथ 'सेट करने के गैर-पसंदीदा तरीके का उपयोग करने के साथ कोई समस्या नहीं है, लेकिन यह केवल इतना नहीं है कि आपको क्या करना चाहिए। 'पायथन-होम' विकल्प लंबे समय तक वर्चुअल वातावरण के स्थान को स्थापित करने का सबसे अच्छा तरीका रहा है। इतने लंबे समय तक कि प्राचीन mod_wsgi संस्करणों के साथ लिनक्स distros भी काम करना चाहिए। यह मामला तब भी है जब दस्तावेज अभी भी अद्यतन नहीं हो सकता है। :-) –

+0

@ ग्राहम-डम्प्लटन आपकी सलाह के लिए धन्यवाद। लेकिन मेरे मामले में, मैं अजगर 3.4 का उपयोग कर रहा हूं, और सेटिंग का उल्लेख "पायथन-घर" तरीका था जैसा आपने उल्लेख किया था। हालांकि, मेरी साइट का दौरा नहीं किया जा सकता है, क्योंकि अपाचे त्रुटि भेजता रहता है "आयात त्रुटि: कोई मॉड्यूल नाम नहीं 'साइट'"। जब तक मैं इसे "गैर पसंदीदा तरीके से" कॉन्फ़िगर करता हूं, तो पूछने वाले की तरह ":" का उपयोग करके, यह समस्या हल हो गई थी। और हां, पायथन 3.5 के लिए, आपको "पायथन-होम" तरीके का उपयोग करना चाहिए, या [आयात त्रुटि: 'django' नामक कोई मॉड्यूल नहीं होगा] समस्या बढ़ेगी। – Valorad

+0

इसका मतलब है कि आपका mod_wsgi वास्तव में पायथन के उस संस्करण के लिए संकलित नहीं है। आप mod_wsgi को इसके लिए संकलित किए गए एक अलग पायथन संस्करण का उपयोग करने के लिए मजबूर नहीं कर सकते हैं। 'पायथन-पथ' का उपयोग करने में समस्याओं में से एक यह है कि जब आप गलत काम कर रहे हैं और mod_wsgi को संकलित करने के लिए mod_wsgi को एक अलग पायथन संस्करण के लिए वर्चुअल वातावरण का उपयोग करने के लिए मजबूर करने की कोशिश नहीं कर रहा है, तो mod_wsgi के लिए संकलित किया गया है। 'पायथन-होम' का उपयोग करते समय यह ठीक से विफल हो जाएगा जिससे आपको यह बताए कि आप कुछ गलत कर रहे हैं। –

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