2012-08-26 62 views
12

我目前使用通過Apache託管在同一個域(但在不同端口上)的兩個Django應用程序(如A & B)。我相信我的設置是正確的,但我在這兩個網站上隨機獲得500個。 A上的500(例如說)大部分發生在B(並且反之亦然)的服務請求之後。在Apache上使用Django和mod_wsgi的多個站點

在檢查錯誤日誌(的說A例如),我看到A的WSGI模塊試圖訪問Bsettings.py文件(這顯然不會發生在那裏,因爲項目路徑不同的)[這也確實發生了另一種情況,B的wsgi提出了一個例外,抱怨缺少A的settings.py文件]。我不確定他們爲什麼會尋找其他設置文件,所有視圖上的導入(對於settings.py)都是特定於相應項目的。

這裏是我的設置:

A被送達端口8080B被送達端口80

虛擬主機:

<VirtualHost *:8080> 

    ServerAdmin [email protected]et 
    ServerName string1 

    Alias /static/ /home/PATH_TO_PROJECT_A/static/ 

    <Directory /home/PATH_TO_PROJECT_A/static> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    WSGIScriptAlias//home/PATH_TO_PROJECT_A/wsgi.py 

    <Directory /home/PATH_TO_PROJECT_A> 
    <Files wsgi.py> 
    Order deny,allow 
    Allow from all 
    </Files> 
    </Directory> 


    LogLevel warn 
    ErrorLog /SOME_PATH/errorA.log 
    CustomLog /SOME_PATH/accessA.log combined 
</VirtualHost> 


<VirtualHost *:80> 
    ServerName string1 
    ServerAdmin [email protected] 

    Alias /APP_B/static/ /home/PATH_TO_PROJECT_B/static/ 

    <Directory /home/PATH_TO_PROJECT_B/static> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    WSGIScriptAlias /APP_B /home/PATH_TO_PROJECT_B/wsgi.py/ 

    <Directory /home/PATH_TO_PROJECT_B> 
    <Files wsgi.py> 
    Order deny,allow 
    Allow from all 
    </Files> 
    </Directory> 

    ErrorLog /home/SOME_PATH/error2.log 
    CustomLog /home/SOME_PATH/access2.log combined 

    # All other files on B:80 (other than /APP_B are served normally 
    DocumentRoot /home/foo/public_html/xyz/public 

</VirtualHost> 

ports.conf:上 'A'

NameVirtualHost *:8080 
Listen 8080 
Listen 80 

<IfModule mod_ssl.c> 
Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
Listen 443 
</IfModule> 

wsgi.py:

import os, sys 

sys.path.append('home/PATH_TO_PROJECT_A') #1 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_A.settings") #2 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

,準確地對B中的相同,與變更線#1和#2。

錯誤我從error.log獲取說例如從A

[Sun Aug 26 17:01:49 2012] [error] [client x] Traceback (most recent call last): 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__ 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self.load_middleware() 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware 
[Sun Aug 26 17:01:49 2012] [error] [client x]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self._setup() 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self._wrapped = Settings(settings_module) 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__ 
[Sun Aug 26 17:01:49 2012] [error] [client x]  raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
[Sun Aug 26 17:01:49 2012] [error] [client x] ImportError: Could not import settings 'PROJECT_B.settings' (Is it on sys.path?): No module named PROJECT_B.settings 

正如你看到的A的錯誤日誌抱怨說Bsettings.py丟失。請擺脫一些光線,我不知道什麼是錯的。我不明白爲什麼一個應用程序會尋找其他的settings.py文件來導入?

這兩個應用程序都按預期工作和執行,但是它們在服務於500的隨機請求中斷開(如果我再次刷新,它將被清除)。

謝謝!

回答

15

Django打破了生成的wsgi.py以在不同的子解釋器中的相同進程中運行多個Django實例。任一使用的mod_wsgi daemon模式和代表每一個單獨的守護進程基,更好的是,無論如何,或改變:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_A.settings") 

到:

os.environ["DJANGO_SETTINGS_MODULE"] = "PROJECT_A.settings" 

類似地,對於其它w​​sgi.py文件。

+2

順便說一下,這其他[問題](http://stackoverflow.com/questions/9581197/two-django-projects-running-simultaneously-and-mod-wsgi-acting-werid)具有一個實際的例子格雷厄姆自己使用單獨的守護進程組。幫了我很多,你有我的選票格雷厄姆! –

+0

仍然不會爲我工作。你能告訴我爲什麼嗎?仍然404頁 – user2771714

+0

不要以爲你有同樣的問題,不要指望人們是心靈的讀者。創建一個單獨的問題和細節到底是什麼問題。 –

相關問題