Django mit WSGI und Apache einrichten
Frage
Ich bin eher von mod_wsgi und apache als von mod_python überzeugt.Ich habe alle Teile installiert (Django, Apache, mod_wsgi), bin aber auf ein Problem bei der Bereitstellung gestoßen.
Ich verwende OSX 10.5 mit Apache 2.2 und Django 1.0b2, mod_wsgi-2.3
Meine Anwendung heißt tred.
Hier sind die relevanten Dateien:httpd-vhosts (in httpd-conf enthalten)
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()
Wenn ich gehe http://tred Ich erhalte eine Verzeichnisliste und nicht die gerenderte Website.Ich glaube, ich habe die Tutorials richtig befolgt, aber es ist offensichtlich nicht richtig.Was kann ich tun, damit das funktioniert?
Lösung
Was passiert, wenn Sie das entfernen? Alias /
Richtlinie?
Andere Tipps
Beachten Sie, dass Alias- und WSGIScriptAlias-Direktiven nicht die gleiche Priorität haben.Daher werden sie nicht in der Dateireihenfolge wie geschrieben verarbeitet.Stattdessen haben alle Alias-Anweisungen Vorrang vor WSGIScriptAlias-Anweisungen.Daher hätte es keine Rolle gespielt, wenn der Alias für „/“ nach WSGIScriptAlias aufgetaucht wäre, er hätte trotzdem Vorrang gehabt.
Es klappt.Ich habe keine Ahnung warum, aber es passiert.
Zum späteren Nachschlagen:
Es funktioniert, weil Apache Alias-Direktiven der Reihe nach verarbeitet und die erste Übereinstimmung verwendet.Es war immer ein Schlag Alias /
, was zu allem passt, vorher WSGIScriptAlias
.
Von dem mod_alias
Dokumentation:
Zuerst werden alle Weiterleitungen verarbeitet, bevor Aliase verarbeitet werden und daher eine Anfrage, die mit a übereinstimmt, verarbeitet wird
Redirect
oderRedirectMatch
Es werden niemals Aliase angewendet.Zweitens werden die Aliase und Weiterleitungen in der Reihenfolge verarbeitet, in der sie in den Konfigurationsdateien erscheinen, wobei die erste Übereinstimmung Vorrang hat.
Versuchen Sie, diesem Tutorial zu folgen - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/
Sie versuchen, den Apache-Ordner /var/www/ und die Django-App beide im Stammverzeichnis (/) zu hosten.Da die Alias-Direktive Vorrang vor WSGIScriptAlias hat, rendert sie das Apache-Verzeichnis.
Sie können versuchen, die Django-App unter /app zu hosten.Alternativ können Sie den Ordner /var/www/ an einem anderen Ort wie /public hosten