Configura Django con WSGI e Apache
Domanda
Mi è stato venduto mod_wsgi e apache anziché mod_python.Ho installato tutte le parti (django, apache, mod_wsgi) ma ho riscontrato un problema durante la distribuzione.
Sono su OSX 10.5 con Apache 2.2 e Django 1.0b2, mod_wsgi-2.3
La mia applicazione si chiama tred.
Ecco i file rilevanti:httpd-vhosts (incluso in 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()
Quando vado a http://tred Ottengo un elenco di directory anziché il sito Web visualizzato.Penso di aver seguito correttamente i tutorial ma ovviamente non è giusto.Cosa posso fare per farlo funzionare?
Soluzione
Cosa succede se rimuovi il file Alias /
direttiva?
Altri suggerimenti
Tieni presente che le direttive Alias e WSGIScriptAlias non hanno la stessa precedenza.Pertanto, non verranno elaborati nell'ordine dei file così come scritto.Tutte le direttive Alias hanno invece la precedenza sulle direttive WSGIScriptAlias.Pertanto, non avrebbe avuto importanza se l'alias per '/' fosse apparso dopo WSGIScriptAlias, avrebbe comunque avuto la precedenza.
Funziona.Non ho idea del perché, ma è così.
Per riferimento futuro:
Funziona perché Apache elabora le direttive alias in ordine e utilizza la prima corrispondenza.Colpisce sempre Alias /
, che corrisponderà a qualsiasi cosa, prima WSGIScriptAlias
.
Innanzitutto, tutti i reindirizzamenti vengono elaborati prima degli alias e quindi una richiesta che corrisponde a
Redirect
ORedirectMatch
non verranno mai applicati gli Alias.In secondo luogo, gli alias e i reindirizzamenti vengono elaborati nell'ordine in cui appaiono nei file di configurazione, con la prima corrispondenza che ha la precedenza.
prova a seguire questo tutorial - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/
stai tentando di ospitare la cartella apache /var/www/ e l'app Django entrambe su root (/).Poiché la direttiva Alias ha la precedenza su WSGIScriptAlias, esegue il rendering della directory apache.
puoi provare a ospitare l'app Django su /app.In alternativa, ospita la cartella /var/www/ in una posizione diversa come /public