2010-07-15 8 views
3

J'essaie d'obtenir Django et Apache travailler ensemble en utilisant mod_wsgi et actuellement que je reçois les erreurs suivantes:Django et Apache Problème

[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Target WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py' cannot be loaded as Python module. 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Exception occurred processing WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py'. 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] Traceback (most recent call last): 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] File "/home/webdev/websites/virtualenvs/polaris/polaris_project.py", line 8, in <module> 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73]  import django.core.handlers.wsgi 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] ImportError: No module named django.core.handlers.wsgi 

Mon apache conf ressemble

Alias /polaris_django/media/ "/home/webdev/websites/virtualenvs/polaris/polaris/static/" 
WSGIScriptAlias /polaris_django /home/webdev/websites/virtualenvs/polaris/polaris_project.py 
WSGIApplicationGroup %{GLOBAL} 

<Directory "/home/webdev/websites/virtualenvs/polaris"> 
     Order deny,allow 
     Allow from all 
</Directory> 

Mon Le fichier Mod_WSGi ressemble à

import os, sys 

sys.path.append('/home/webdev/websites/virtualenvs/polaris') 
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/apps') 
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/extra_settings') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'polaris.settings' 
print >> sys.stderr, sys.path 
import django.core.handlers.wsgi 

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

Comment puis-je obtenir Apache au service de Django correctement?

Répondre

5

Il semble que vous utilisiez un virtualenv - vous devez l'activer dans votre script WSGI pour configurer correctement les chemins.

activate_this = os.path.join("path/to/my/virtualenv", "bin/activate_this.py") 
execfile(activate_this, dict(__file__=activate_this)) 
2

On dirait que Django n'est pas dans votre chemin ... pouvez-vous poster la valeur de votre sys.path?

+0

[. .. '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/ usr/lib/python2 .6/lib-old ',' /usr/lib/python2.6/lib-dynload ',' /usr/lib/python2.6/dist-packages ',' /usr/lib/pymodules/python2.6 ' '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages', '/ home/webdev/websites/virtualenvs/polaris/pysrc/a pps ','/home/webdev/sites/virtualenvs/polaris/pysrc/extra_settings ','/home/webdev/sites/virtualenvs/polaris/pysrc '] – silent1mezzo

+0

Aussi, si je fais python polaris.wsgi ça marche bien. J'ai aussi changé de polaris -> pysrc – silent1mezzo

1

Je suppose que apache utilise une version différente de python ou utilise un autre sys.path. Qu'est-ce que vous obtenez en sortie pour le sys.path?

1

Où est installé Django? De la ligne de commande Python do:

import django 
print django.__file__ 

Si elle n'est pas installé dans le répertoire approprié sur sys.path sous /usr/lib/python2.6 ou /usr/local/lib/python2.6, alors c'est le problème. En supposant que vous ayez réellement installé Django, cela peut se produire parce que vous avez plusieurs versions de Python installées et que vous en avez utilisé une autre différente de celle utilisée par mod_wsgi pour installer Django. Ou vous avez utilisé un environnement virtuel et n'avez pas dit à mod_wsgi où c'est. Ou vous avez réussi à installer Django avec des permissions que Apache ne peut pas lire.

aller voir la vidéo de parler et lire des diapositives trouvables:

http://blog.dscpl.com.au/2010/06/sydney-pycon-modwsgi-talk-slides.html

Ils couvrent ce genre de problème, ainsi que beaucoup d'autres choses liées aux autorisations etc.