Configurer Django avec WSGI et Apache
Question
J'ai été vendu sur mod_wsgi et apache plutôt que sur mod_python.J'ai toutes les pièces installées (django, apache, mod_wsgi) mais j'ai rencontré un problème de déploiement.
Je suis sous osx 10.5 avec apache 2.2 et django 1.0b2, mod_wsgi-2.3
Mon application s'appelle tred.
Voici les fichiers concernés :httpd-vhosts (inclus dans httpd-conf)
NameVirtualHost tred:80 ServerName tred Alias /admin_media /usr/lib/python2.5/site-packages/django/contrib/admin/media Order allow,deny Allow from all Alias /media /Users/dmg/Sites/tred/media Order allow,deny Allow from all Alias / /Users/dmg/Sites/tred/ Order allow,deny Allow from all WSGIScriptAlias / /Users/dmg/Sites/tred/mod_wsgi-handler.wsgi WSGIDaemonProcess tred user=dmg group=staff processes=1 threads=10 WSGIProcessGroup tred
mod_wsgi-handle.wsgi
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'tred.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Quand je vais à http://tred Je reçois une liste d'annuaire plutôt que le site Web rendu.Je pense avoir suivi correctement les tutoriels mais ce n'est visiblement pas correct.Que puis-je faire pour que cela fonctionne ?
La solution
Que se passe-t-il si vous supprimez le Alias /
directif?
Autres conseils
Notez que les directives Alias et WSGIScriptAlias n'ont pas la même priorité.Ainsi, ils ne seront pas traités dans l’ordre des dossiers tel qu’écrit.Au lieu de cela, toutes les directives Alias ont priorité sur les directives WSGIScriptAlias.Ainsi, cela n'aurait pas eu d'importance si l'alias pour « / » apparaissait après WSGIScriptAlias, il aurait toujours eu la priorité.
Ça marche.Je ne sais pas pourquoi, mais c'est le cas.
Pour référence future:
Cela fonctionne parce qu'Apache traite les directives d'alias dans l'ordre et utilise la première correspondance.Ça frappait toujours Alias /
, qui correspondra à n'importe quoi, avant WSGIScriptAlias
.
Premièrement, toutes les redirections sont traitées avant que les alias ne soient traités, et donc une requête qui correspond à un
Redirect
ouRedirectMatch
aucun alias ne sera appliqué.Deuxièmement, les alias et les redirections sont traités dans l'ordre dans lequel ils apparaissent dans les fichiers de configuration, la première correspondance étant prioritaire.
essayez de suivre ce tutoriel - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/
vous essayez d'héberger le dossier Apache /var/www/ et l'application Django à la racine (/).Étant donné que la directive Alias est prioritaire sur WSGIScriptAlias, elle restitue le répertoire Apache.
vous pouvez essayer d'héberger l'application Django sur /app.Vous pouvez également héberger le dossier /var/www/ à un emplacement différent comme /public