2010-11-16 69 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/