2010-01-09 4 views
3

J'ai besoin de mettre en place un environnement de développement django visible sur Internet (je le fais pour l'école, et mes projets doivent être visibles par mon professeur, ce n'est pas une configuration qui nécessite beaucoup de sécurité). J'ai un serveur virtuel exécutant Ubuntu 8.04 LTS.Comment déployer l'application Django à un sous-url?

Je dois avoir plusieurs applications django en cours d'exécution dans les sous-répertoires de mon site principal. Autrement dit, j'ai besoin de mysite.com pour être une page statique, mysite.com/wordpress pour être mon blog wordpress, et mysite.com/django1 mysite.com/django2 etc. pour être des projets django. J'utilise apache, et j'utiliserai sqlite ou mysql.

Il semble y avoir autant de façons différentes d'installer et de configurer django qu'il y a des sites offrant des conseils, et tous supposent qu'un seul projet sera la racine du site. J'apprécierais vraiment de l'aide, merci.

Répondre

3

Vous pouvez utiliser

WSGIScriptAlias /django1 /home/keratacon/www/django1/wsgi.py 
WSGIScriptAlias /django2 /home/keratacon/www/django2/wsgi.py 

dans votre apache+mod_wsgi config, en supposant wsgi.py est le nom de votre script wsgi.

0

This blog explique la solution (en supposant que mod_wsgi est utilisé, avec nginx/uwsgi la solution est similaire apparemment dans nginx/uwsgi ce n'est pas nécessaire).

Le premier paramètre de WSGIScriptAlias ​​- le /sub-url sera supprimé de l'URL de demande et le reste ira à votre application django. Si vos URL de l'application Django commencent toutes par /sub-url (qui sont supprimées par mod_wsgi), vous ne pourrez pas afficher les vues à ces URL, à moins que vous ne réinsérez le /sub-url dans la partie du chemin de la requête.

import django.core.handlers.wsgi 

_application = django.core.handlers.wsgi.WSGIHandler() 
def application(environ, start_response): 
    #the line below will re-append the sub-url to all urls 
    environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO'] 
    #this one will make django think that it's the only thing running on the server 
    environ['SCRIPT_NAME'] = '' # my little addition to make it work 
    return _application(environ, start_response) 

De même dans votre urls.py toutes les URL doivent être préfixées avec le sous-URL de votre intérêt.

Enfin, les WSGIScriptAlias ​​doivent être les mêmes que votre sous-url:

#the below line will "take-out" the sub-url and pass the rest 
#to your wsgi script 
WSGIScriptAlias /sub-url /path/to/wsgi_script 

Si le fichier doit contenir /path/to/wsgi_script la définition de application comme indiqué dans le premier extrait de code.

Pour rendre explicite la configuration de "sous-url" dans Django, le correctif de chemin de requête équivalent doit se produire dans le framework Django.

+0

Ces devinettes SCRIPT_NAME et PATH_INFO ne devraient pas être requises avec Django 1.0 et versions ultérieures. Ils n'étaient nécessaires que pour les anciennes versions de Django. Si vous utilisez encore cela, vous faites quelque chose de mal. –

+0

Hmm, j'ai essayé de trouver ça dans les docs de Django et je n'ai pas pu ... Peut-être que j'ai regardé un mauvais endroit. – Evgeny

+0

L'emplacement d'origine du violon était http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango. Il n'a jamais été décrit dans les docs Django. Il dit que les correctifs ont été inclus dans Django 1.0 afin de ne pas avoir besoin du violon. –