2010-11-16 47 views
5

我在用django设置wgsi时遇​​到问题。我正在关注这个http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/。但是我仍然对将.wsgi文件放在哪里以及是否需要设置sys.path感到困惑。我已经试过它直接外部和内部的网络根,我不能得到任何预期的工作。Django WGSI路径

# /home/ben/public_html/django_test/testproject/apache/django.wsgi: 

import os 
import sys 

os.environ['DJANGO_SETTINGS_MODULE'] = 'testproject.settings' 

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

Relivant的apache的conf:

DocumentRoot "/home/ben/public_html/django_test/testproject/" 
WSGIScriptAlias/"/home/ben/public_html/django_test/testproject/apache/django.wsgi" 

Apache日志错误(标准的Apache 500页):

ImportError: Could not import settings 'testproject.settings' (Is it on sys.path? ... 

我可以获取的Django至少要由把它自己的错误使用这个:

import os 
import sys 

path = '/home/ben/public_html/django_test/testproject' 
if path not in sys.path: 
    sys.path.append(path) 

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

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

这就造成了这个Django的错误页面:

ImportError at /admin/ 
No module named testproject.urls 

回答

8

我把WSGI以比同级别settings.py,看起来像这样:

import os 
import sys 

sys.path.insert(0,os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2])) 


os.environ['DJANGO_SETTINGS_MODULE'] = 'yourprojectname.settings' 

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

这是Apache的conf文件:

NameVirtualHost *:80 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.yourprojectname.com 
    Alias /media/ /home/diegueus9/workspace/yourprojectname/media/ 

    <Directory /home/diegueus9/workspace/yourprojectname/media/> 
     Order deny,allow 
     Allow from all 
    </Directory> 

    WSGIScriptReloading On 
    WSGIDaemonProcess yourprojectname 
    WSGIProcessGroup yourprojectname 
    WSGIApplicationGroup yourprojectname 
    WSGIPassAuthorization On 

    WSGIScriptAlias//home/diegueus9/workspace/yourprojectname/yourfile.wsgi 
    ErrorLog /var/log/apache2/yourprojectname-error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel debug 

    CustomLog /var/log/apache2/yourprojectname-access.log combined 

</VirtualHost> 
+0

这给了Apache 500还试图设置'os.environ ['DJANGO_SETTINGS_MODULE '] ='testproject.settings' '。但没有运气。 – Keyo 2010-11-16 12:53:40

+0

我编辑我的答案。 – diegueus9 2010-11-16 12:55:48

1

作为一个快速修复就可以了,旁边加入这sys.path中:

path = '/home/ben/public_html/django_test/testproject' 

也补充一点:

path2 = '/home/ben/public_html/django_test' 

你也可以改变你的Apache虚拟主机的Python路径:

WSGIDaemonProcess [...] python-path=/home/ben/public_html/django_test 

但是,您还应该查看mod_wsgi文档并了解Graham Dumpleton在此处提供的建议。

0

我刚刚花了几个小时解决这个问题,我的修复程序是SELinux禁止访问我的/django/文件夹。

要检查是否SEStatus阻止您的访问,在/var/log/audit/audit.log

查看日志我的修复是一个简单的:

restorecon -R /var/www/django/