2010-12-09 30 views
2

J'utilise virtual env avec mod_wsgi et django.sys.path ne trouve pas les paramètres du module sur apache

Je tournai ma env virtuelle à '/ home/project_name'

Je ne peux pas qu'Apache trouver mon settings.py. Des idées?

Mon wsgi ressemble:

import os 
import sys 
# put the Django project on sys.path 
path = '/home/project_name/lib/python2.6/site-packages' 
if path not in sys.path: 
    sys.path.append(path) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings' 
from django.core.handlers.wsgi import WSGIHandler 
application = WSGIHandler() 

et mon fichier hôte virtuel apache ressemble:

WSGIScriptAlias//home/project_name/releases/current/project_name/wsgi-scripts/project_name.wsgi 
    <Directory /home/project_name/releases/current/project_name/wsgi-scripts> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    ErrorLog /var/log/apache2/error.log 
    LogLevel warn 
    CustomLog /var/log/apache2/access.log combined 

Répondre

2

Le chemin que vous voulez ajouter à sys.path (si ce n'est pas là) est le dossier au-dessus dossier du projet de django. Au lieu de tout extraire pour trouver votre problème spécifique, j'utilise un script de configuration WSGI qui atténue tout chemin codé dur comme vous l'avez fait et rend les choses beaucoup plus simples à installer/déployer. J'ai un sous-répertoire appelé 'apache' sous mon dossier principal de projets avec un seul fichier django.wsgi. Comme suit ...

/djangoproject 
    __init__.py 
    settings.py 
    ... 
    /apache 
     django.wsgi 

Dans le script django.wsgi ci-dessous est portable à tout autre projet avec le même dossier de projet apache en changeant simplement les paramètres préfixe de chaîne du module ...

import os 
import sys 

apache_dir = os.path.dirname(__file__) 
project = os.path.dirname(apache_dir) 
workspace = os.path.dirname(project) 
if workspace not in sys.path: 
    sys.path.append(workspace) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoproject.settings' 
from django.core.handlers.wsgi import WSGIHandler 
application = WSGIHandler() 

Apache configuration de serveurs virtuels comme suit ...

... 

WSGIScriptAlias//var/www/sitename/djangoproject/apache/django.wsgi 
WSGIDaemonProcess djp_wsgi user=myusername group=admin processes=1 threads=10 
WSGIProcessGroup djp_wsgi 

<Directory /var/www/sitename/djangoproject/apache/> 
    Order deny,allow 
    Allow from all 
</Directory> 

... 

espoir qui aide, je n'ai jamais aucun problème avec cette configuration. Une note supplémentaire, le nom de dossier apache et le nom de fichier django.wsgi peut être nommé à peu près tout ce que vous voulez, ces noms spécifiques sont juste ce que j'ai choisi.

+0

merci.ce fut très utile – prostock