2010-06-17 180 views
2

我想讓我的Django項目在生產服務器上運行。Django apache-wsgi配置問題

我使用pip設置環境,所以它與一切運行良好的開發環境相同。唯一的區別是我不會在生產環境中使用virtualenv,因爲這個項目是唯一一個將在生產環境中運行的項目。在生產環境中,還有一個Nginx反向代理服務器用於提供靜態內容,並將動態請求傳遞給Apache2。

Apache的WSGI文件如下:

import sys, os 

sys.path.append('/home/project/src') 

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

當我訪問服務器,我得到一個導入錯誤:

ImproperlyConfigured: Error importing middleware middleware: "cannot import name UserProfile" 

這是指middleware.py在src /文件夾,其中由設置引用。但是我可以從./manage.py shell提示符中導入中間件和UserProfile類。

這似乎是與wsgi文件中的路徑問題,但我看不到什麼。目錄結構是:

/home/project 
/home/project/src (which contains the settings.py, middleware.py and app folders) 
/home/apache/apache.wsgi 

任何幫助,非常感謝。

感謝, OMAT

+1

您安裝的應用程序的外觀如何?嘗試添加「/ home/project /」到您的sys路徑 – Prashanth 2010-06-17 12:22:16

+0

嘗試添加您輸入的路徑'django-admin.py ...' – deostroll 2010-06-17 12:27:37

+0

我安裝的應用程序如下所示:INSTALLED_APPS =('django.contrib.auth' ,...,'profiles','products',...)。你的意思是在wsgi文件的sys.path中添加「/ home/project」?這沒有奏效。 – omat 2010-06-17 12:59:32

回答

3

確保所有的目錄/文件被他人讀取,使Apache用戶可以訪問它們,除非這是您正在使用不同的用戶守護進程模式,用戶必須能夠讀取的情況下他們。另請閱讀:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

它可能沒有幫助,但在爲此所描述的WSGI腳本文件的內容將保證過程的環境設置更接近什麼Django開發服務器執行的情況下,它關係到這些差異。

+0

非常感謝。我不知道爲什麼以及如何,但你的wsgi腳本解決了我的問題。順便說一句,由於谷歌的緩存副本,無法訪問您的帖子的鏈接。 – omat 2010-06-18 15:17:42

1

看着我自己的文件,我添加包含項目的目錄,我指定project .settings,不settings

嘗試:

import sys, os 

sys.path.append('/home/') 
sys.path.append('/home/project/') 

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

這將是更好,如果你做的東西像~/django-sites爲了指定代替/home