2009-02-24 5 views
3

J'ai des problèmes majeurs pour faire fonctionner Django avec ma configuration Apache. Je n'ai pas créé le serveur, donc je n'ai pas trop de marge de manoeuvre sur le fonctionnement du serveur. Essentiellement, il y a trois hôtes virtuels:Configurer Django avec mod_python, Apache sur SuSE avec Alias ​​

board.site.org, students.site.org et insider.site.org

Le insider.site.org est le principal, je suis préoccupé par. Je suis en charge d'un petit site en dessous (idéalement sur insider.site.org/tech). J'ai décidé de séparer mes fichiers du répertoire d'origine, pour ne pas risquer de mettre quelque chose là dedans (car un site non-python est déjà en place). Quoi qu'il en soit, mes hôtes virtuels sont définis dans des fichiers séparés dans /etc/apache2/vhosts.d/

Voici ce que la configuration de l'insider.site.org ressemble

insider.conf

LoadModule python_module /usr/lib64/apache2/mod_python.so 

<VirtualHost 10.10.1.1:80> 
ServerName insider.site.org 
DocumentRoot /media/nss/VWEB/docs 
    <Directory /media/nss/VWEB/docs> 
     Options Indexes Multiviews 
     AllowOverride None 
     Order Allow,Deny 
     #Allow from 10.11.0.78 
     Allow from all 
    </Directory> 

Alias /tech /srv/www/Tech 

    <Directory /srv/www/Tech> 
     SetHandler python-program 
     PythonPath "['/srv/www/Tech'] + sys.path" 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE Tech.settings 
     PythonDebug On 
    </Directory> 


Alias /media /srv/www/Media 

    <Directory /srv/www/Media> 
     SetHandler None 
    </Directory> 

</VirtualHost> 
  • Notez que quand je dis site.org, je fais référence à mon site, pas à l'adresse web "site.org".

Maintenant, il semble que cela devrait être bon pour moi, mais pour une raison quelconque, l'accès http://insider.site.org/tech/ me donne cette erreur:

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch result = object(req)

File "/usr/lib64/python2.4/site-packages/mod_python/publisher.py", line 98, in handler path=[path])

File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 454, in import_module f, p, d = imp.find_module(parts[i], path)

ImportError: No module named index

Alors que http://insider.site.org/tech (pas de fuite en avant slash) entraîne une erreur 403 . J'ai Django dans ce répertoire, mais il n'est simplement pas exécuté (j'ai _ init _.py dans tous mes répertoires sous le dossier tech, et ceci est une copie de mon propre ordinateur personnel (qui a fonctionné de le serveur de test django)) donc je ne pense pas que ce soit le problème. Ceci est tout simplement ne fonctionne pas :-(

Toute aide est appréciée, merci.

Répondre

2

Pour votre premier problème, vous êtes sûr que vous avez Django dans le PythonPath que vous avez spécifié? Sur mon serveur, la liste dans mon PythonPath inclut le répertoire contenant le répertoire django de niveau supérieur, qui contient lui-même les répertoires bin, contrib, admin, core, etc., en plus de __init__.py. (Assurez-vous également que votre utilisateur Apache dispose des permissions de lecture et d'exécution pour ces fichiers . répertoires, même si je suis sûr que cela est évident) Ceci est ma configuration:

<Location "/myapp"> 
    SetHandler python-program 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE LogFileAnalyzer.settings 
    PythonDebug on 
    PythonPath "['/srv/www/dir_containing_django_dir', '/srv/www/myapp_dir'] + sys.path" 
</Location> 

Notez que j'utilise Loca au lieu de Répertoire ici, votre kilométrage peut varier.

Pour votre deuxième problème, cela ressemble à un problème pour mod_rewrite. Voir here. Vous pouvez laisser le serveur ajouter automatiquement le slash dont vous avez besoin en définissant une règle de réécriture:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

Hope that helps.

1

Alias /tech /srv/www/Tech doit être supprimé et <Directory /srv/www/Tech> doit être converti en un emplacement. Souvenez-vous que vous n'essayez pas de faire en sorte que Apache serve vos fichiers Python, vous lui dites de lancer un certain processus Python lorsqu'il atteint un emplacement spécifique.

Aussi, je peux vous suggérer d'utiliser des sous-domaines plutôt que d'avoir votre application Django dans un "dossier" sur votre domaine principal. Cela tend à simplifier les choses à mon avis.

Egalement pour votre considération est mod_wsgi. J'ai récemment commencé à l'utiliser pour mes applications Django, et ils ont fait un bond en avant dans les performances et la stabilité :)

0

Peut-être pas aussi utile pour le problème de mod_python, mais vraiment, mod_python est le pire moyen de déployer Django (en fait pire moyen de déployer n'importe quel type de Python du tout).

S'il vous plaît, pensez à utiliser mod_wsgi au moins, c'est mieux pour la performance et un certain nombre d'autres raisons. De plus, vous aurez un excellent support des développeurs de ce mod à #django sur freenode. Spawning/FastCGI est encore meilleur dans la mesure où vous ne vous souciez pas du tout d'Apache.

+0

Désolé, je n'ai pas répondu. En fait, j'ai/ai fait fonctionner ça. Si je me souviens bien (cela fait quatre mois) c'était exactement ce que vous avez dit. J'avais besoin de le changer à un endroit. Aussi, je vais jeter un oeil à mod_wsgi, puisque j'ai reçu deux recommandations pour cela presque instantanément. Enfin, en ce qui concerne le sous-dossier, mon superviseur (non développeur, bien sûr) n'a pas voulu créer un sous-domaine pour moi, et il a choisi d'avoir le dossier/tech/sub. Tout ce que cela fait vraiment pour moi, c'est changer mon fichier urls.py, donc ça ne me dérange pas tellement. Merci pour toute l'aide, vraiment l'apprécier! –

Questions connexes