2010-04-18 13 views
7

Właśnie zakończyłem konfigurację aplikacji django na virtualenv, wdrożenie poszło gładko za pomocą skryptu tkaniny, ale teraz .wsgi nie działa, próbowałem każdej odmiany w Internecie, ale brak szczęścia. Mój plik .wsgi jest:django + mod_wsgi na virtualenv nie działa

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() 

wciąż otrzymuję ten sam błąd:

[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 

moje wirtualne środowisko to/home/user/webapps/kcdfweb moja aplikacja jest/home/user/webapps /kcdf.web/releases/current/project_name mój dom plik WSGI/user/webapps/kcdf.web/releases/prąd/PROJECT_NAME/apache/project_name.wsgi

Odpowiedz

1

trzeba dodać katalog, który jest dwa znad twój plik wsgi, więc zamiast:

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

trzeba mieć

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

... jako plik WSGI jest w katalogu o nazwie apache, pod folderze projektu.

+0

próbowali że to nie działa, może warto zauważyć, że kiedy stworzył przykładowego projektu Django poza virtualenv i starał się go dostałam uruchomić: jwesonga @ kcdf: ~/tester $ eksport DJANGO_SETTINGS_MODULE = tester.settings jwesonga @ kcdf: ~/tester $ django-admin.py runserver Błąd: Nie można zaimportować ustawień "tester.settings" (Czy jest na sys.path? Czy ma błędy składni?): Brak modułu o nazwie tester.settings – jwesonga

0

Jeśli używasz virtualenv, musisz aktywować go w skrypcie WSGI, aby ustawić ścieżki poprawnie.

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

Użycie activ_this.py w mod_wsgi jest odradzane, ponieważ powoduje skrzypce z sys.prefix, co technicznie może powodować problemy z niektórymi kodami. Przeczytaj "http://code.google.com/p/modwsgi/wiki/VirtualEnvironments". –

+0

Ponadto, activate_this jest niepotrzebne. Jedyne, co musisz zrobić, to wywołać site.addsitedir() na virtualenv site-packages reż. –

+3

Nie, witryna.addsitedir() nie zawsze jest wystarczająca, szczególnie, jeśli nie użyto pakietów -no-site-packages podczas tworzenia środowiska wirtualnego. Dzieje się tak, ponieważ site.addsitedir() dodaje nowe katalogi na końcu sys.path, więc wszystko w standardowej instalacji Pythona ma pierwszeństwo. Celem skryptu jest zmiana kolejności sys.path, aby nowe katalogi działały na początku i miały pierwszeństwo. Przejdź do dokumentacji, o której mowa na stronie mod_wsgi. –

0

Czy masz plik __init__.py w katalogu "kcdf"? Bez tego nie można zaimportować pliku ustawień.

Powinieneś także wywoływać site.addsitedir() w katalogu pakietów virtualenv, jeśli spodziewasz się móc importować rzeczy z virtualenv. Szczegóły: the mod_wsgi docs. Chociaż nie można nawet zaimportować ustawień, nie sądzę, aby to był twój obecny problem.

7

Polecam, aby spojrzeć na docs za pomocą Virtualenv z mod_wsgi. Oferują kilka alternatywnych podejść do podłączania do virtualenv, które mogą działać lepiej dla ciebie.