2010-04-18 22 views
7

मैं सिर्फ virtualenv पर एक Django अनुप्रयोग स्थापित करने के बाद, उसे तैनाती एक कपड़े स्क्रिप्ट का उपयोग कर सुचारू रूप से चला गया, लेकिन अब .wsgi काम नहीं कर रहा virtualenv पर mod_wsgi, मैं इंटरनेट पर हर भिन्नता की कोशिश की है लेकिन कोई भाग्य नहीं। मेरे .wsgi फ़ाइल है:Django + काम नहीं कर रहा

import os 
import sys 
import django.core.handlers.wsgi 

# put the Django project on sys.path 
root_path = os.path.abspath(os.path.dirname(__file__) + '../') 
sys.path.insert(0, os.path.join(root_path, 'kcdf')) 
sys.path.insert(0, root_path) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'kcdf.settings' 

application = django.core.handlers.wsgi.WSGIHandler() 

मैं एक ही त्रुटि मिलती रहती है:

[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] mod_wsgi (pid=16938): Exception occurred processing WSGI script '/home/kcdfweb/webapps/kcdf.web/releases/current/kcdf/apache/kcdf.wsgi'. 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] Traceback (most recent call last): 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 230, in __call__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self.load_middleware() 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 33, in load_middleware 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/utils/functional.py", line 269, in __getattr__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self._setup() 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 40, in _setup 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self._wrapped = Settings(settings_module) 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 75, in __init__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] ImportError: Could not import settings 'kcdf.settings' (Is it on sys.path? Does it have syntax errors?): No module named kcdf.settings 

मेरी आभासी पर्यावरण पर/घर/उपयोगकर्ता है/webapps/kcdfweb मेरे एप्लिकेशन/घर/उपयोगकर्ता/webapps है /kcdf.web/releases/current/project_name मेरी WSGI फ़ाइल घर/उपयोगकर्ता/webapps/kcdf.web/विज्ञप्ति/वर्तमान/PROJECT_NAME/अपाचे/project_name.wsgi

उत्तर

1

आप निर्देशिका है कि दो से ऊपर है जोड़ने की जरूरत आपकी wsgi फ़ाइल, तो इसके बजाय:

root_path = os.path.abspath(os.path.dirname(__file__) + '../') 

आप होना चाहिए

root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../', '../')) 

... अपने WSGI फ़ाइल एक निर्देशिका apache कहा जाता है, अपनी परियोजना फ़ोल्डर के अंतर्गत में है के रूप में।

+0

की कोशिश की है कि यह काम नहीं किया, ध्यान देने योग्य हो सकता है कि जब मैं virtualenv के बाहर एक नमूना Django परियोजना बनाया है और वह मुझे मिल गया भागने की कोशिश की: jwesonga @ kcdf: ~/परीक्षक $ निर्यात DJANGO_SETTINGS_MODULE = tester.settings jwesonga @ kcdf: ~/tester $ django-admin.py रनरवर त्रुटि: सेटिंग्स 'tester.settings' आयात नहीं कर सका (क्या यह sys.path पर है? क्या इसमें सिंटैक्स त्रुटियां हैं?): Tester.settings नामक कोई मॉड्यूल नहीं – jwesonga

0

आप एक virtualenv का उपयोग कर रहे हैं, तो आप WSGI स्क्रिप्ट के भीतर इसे सक्रिय करने के लिए सही ढंग से पथ सेट करना होगा।

root_path = os.path.abspath(os.path.dirname(__file__) + '../') 
activate_this = os.path.join(root_path, "bin/activate_this.py") 
execfile(activate_this, dict(__file__=activate_this)) 
+1

Mod_wsgi में activate_this.py का उपयोग निराश है क्योंकि यह sys.prefix के साथ fiddles करता है जो तकनीकी रूप से कुछ कोड के साथ मुद्दों का कारण बन सकता है। 'Http://code.google.com/p/modwsgi/wiki/VirtualEn वातावरण' पढ़ें। –

+0

इसके अलावा, सक्रिय_ यह अनावश्यक है। आपको बस वर्चुअलनव साइट-पैकेज डीआईआर पर कॉल साइट .addsitedir() है। –

+3

नहीं है, site.addsitedir() हमेशा के लिए पर्याप्त है, खासकर यदि आप आभासी वातावरण बनाते समय --no-साइट-संकुल का उपयोग नहीं किया। ऐसा इसलिए है क्योंकि site.addsitedir() sys.path के अंत में नई निर्देशिका जोड़ता है और इसलिए मानक पायथन स्थापना में कुछ भी अभी भी प्राथमिकता लेता है। स्क्रिप्ट का उद्देश्य sys.path को पुन: व्यवस्थित करना है, इसलिए नई निर्देशिकाएं शुरुआत में जाती हैं और प्राथमिकता लेती हैं। Mod_wsgi साइट पर निर्दिष्ट दस्तावेज को पढ़ें। –

0

आप अपने "kcdf" निर्देशिका में एक __init__.py फ़ाइल है? इसके बिना आपकी सेटिंग्स फ़ाइल आयात नहीं की जा सकती है।

इसके अलावा, आप site.addsitedir() virtualenv की साइट-संकुल निर्देशिका पर फोन किया जाना चाहिए, अगर आप virtualenv से सामान आयात करने में सक्षम होने की उम्मीद। विवरण के लिए the mod_wsgi docs देखें। हालांकि अगर यह आपकी सेटिंग्स भी आयात नहीं कर सकता है, तो मुझे नहीं लगता कि यह आपकी वर्तमान समस्या है।

7

मुझे लगता है कि आप mod_wsgi साथ virtualenv प्रयोग करने के लिए docs को देखने की सलाह देते हैं। वे आपके वर्चुअलएन्व में हुकिंग के लिए कुछ वैकल्पिक दृष्टिकोण प्रदान करते हैं जो आपके लिए बेहतर काम कर सकते हैं।

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