2011-02-18 2 views
1

J'ai une application django qui fonctionne parfaitement sous le serveur de développement django. Maintenant j'essaye de l'exécuter sous apache2.2 en utilisant le mod_wsgi.
Dans le fichier httpd.conf de apache J'ai ajouté:

Obtention d'un modèle d'annulation passant du serveur de développement django au serveur apache

<IfModule wsgi_module> 
    WSGIScriptAlias /index my_path_to_wsgi_modules/django.wsgi 
</IfModule> 

et le module django.wsgi contient toute la configuration de base, comme expliqué dans la documentation de django: http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/
Malheureusement, quand je lance le serveur et essayez d'accéder à la page principale j'obtiens la page de modèle mais sans données variables dedans. Le journal du serveur dit:

[Fri Feb 18 13:50:33 2011] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/api, referer: http://127.0.0.1/example/ 


Comme je l'ai dit la chose étrange est que le même code fonctionne parfaitement sous serveur de développement django. Je suis nouveau dans l'application Web de programmation, s'il vous plaît, quelqu'un peut-il aider?

Mon fichier django.wsgi ressemble à ceci:

import os import sys

de sep importation os.path

basePath = «/home/example/WorkSpace/examplews/src »

sys.path.append (basePath)
sys.path.append ('/ home/example/WorkSpace/examplews/src/examplews')

os.environ [ 'DJANGO_SETTINGS_MODULE'] = 'examplews.settings de

import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()

et mon fichier httpd.con, comme ceci:

ServerRoot "/ usr/local/apache2"

Listen 80

LoadModule modules wsgi_module/mod_wsgi.so

utilisateur apache
Groupe apache

ServerAdmin exemple @ domaine.com

DocumentRoot "/ usr/local/apache2/htdocs"

<Directory />
Options de FollowSymLinks
AllowOverride Aucun
Order Deny, permet
Deny de tous
</Directory>

<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks

AllowOverride Aucun

Order allow, deny
Allow de tous

</Directory>

<IfModule dir_module>
DirectoryIndex index.html index.php index.sh default.jsp
</IfModule>

<FilesMatch "^\.ht">
ordre allow, deny
Deny de tous
Satisfy Tous
</FilesMatch>

ErrorLog "logs/error_log"

logLevel avertir

<IfModule log_config_module>
LogFormat « % h% l% u% t \ "% r \"%> s% b \ "% {Référenceur} i \" \ "% {Utilisateur-Agent} i \" "combiné
LogFormat"% h% l% u% t \ "% r \ "%> s% b" commun

<IfModule logio_module>
LogFormat "% h% l% u% t \" % r \ » %> de% b de \ "% {Referer} i \" \ "% {User-Agent} i \" % I % O » combinedio
</IfModule>
CustomLog "logs/access_log" commun

</IfModule>

<IfModule alias_module>
</IfModule>

<IfModule cgid_module>
</IfModule>

<IfModule wsgi_module>
WSGIScriptAlias ​​/ main/home/example/WorkSpace/examplews/src/examplews/apache_conf/django.wsgi
</IfModule>
<Directory "/home/example/WorkSpace/examplews/src/examplews/apache_conf">
Order allow, deny
Allow de tous
</Directory>
texte DefaultType/plain

<IfModule mime_module>
TypesConfig/mime.types
conf AddType application/x-compress .Z Application AddType/x-gzip .gz .tgz </IfModule>

<IfModule ssl_module>
démarrage SSLRandomSeed builtin
SSLRandomSeed connecter builtin
</IfModule>

+0

Est-ce que '/ usr/local/apache2/htdocs/api' existe réellement? Peut-être que quelque chose d'autre dans Apache est mal configuré. –

+0

Non,/usr/local/apache2/htdocs/api cela n'existe pas. En fait, il s'agit d'une URL virtuelle qui devrait être accessible via django urls.py – green69

+0

S'il vous plaît poster votre configuration complète d'Apache, et le fichier wsgi. –

Répondre

0

Enfin, je trouve l'erreur. Il n'était pas connecté au fichier httpd.conf mais à la manière dont les URL sont spécifiées à la fois dans le fichier django urls.py et dans les modèles.
Comme je l'ai monté monapp ainsi:

WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi 

j'étais croire que les URL spécifiées dans les fichiers de modèle django doivent porter une barre oblique initiale, comme celui-ci: '/api/dir'
Il en résulte que de cette manière l'application ne fonctionne que sur serveur de développement django mais pas sur Apache.

Au lieu de cela si vous utilisez des URL sans slash initial comme:
'api/dir'
L'application fonctionne correctement à la fois sur le serveur de développement de django et apache!

Vous devez éviter d'utiliser des barres obliques départ même sur la correspondance de motif de django fichier urls.py:
comme ceci: (r'^api/dir$', 'available_services')
et non comme cela: (r'^/api/dir$', 'available_services')

Peut-être que cela est une chose évidente pour les utilisateurs experts django mais si vous êtes novice comme moi, cela peut vous faire perdre un certain temps parce que c'est un problème difficile à détecter.

Questions connexes