2011-04-05 51 views
2

我正在運行一個ec2實例來承載一些Django網站。這些網站由Apache使用mod_wsgidjango,apache,mod_wsgi和python py-scrypt不能一起工作

由於幾天我試圖部署一個新的web平臺,我們正在開發,但我遇到了一個似乎不可能解決的問題。出於安全原因,我們使用scrypt 0.4來保護用戶的個人信息,如密碼。

在開發服務器上,一切都像一個魅力,但是當我們部署到我們的實時服務器時,我們得到一個500內部服務器錯誤。 Apache的日誌給了我以下消息腳本頭

過早結束:socialmarketingplatform.wsgi,引用者:

當我去掉其中scrypt模塊使用一切正常就行了。另外當我運行與Django一起交付的服務器時,scrypt啓用了一切在活動服務器上的作品。所以它是生成錯誤的mod_wsgi,django和scrypt的組合。

我使用下列WSGI文件:

import os 
import sys 

path = '/var/www/vhosts/[sub_domain]' 
if path not in sys.path: 
    sys.path.append(path) 
sys.path.append(path + '/socialmarketingplatform') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'socialmarketingplatform.settings' 

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

而下面的虛擬主機配置:

<VirtualHost *:80> 
    #Basic setup 
    ServerAdmin [removed email] 
    ServerName luxdevelopment.net 
    ServerAlias [sub domain] 
    DocumentRoot /var/www/vhosts/[sub domain]/socialmarketingplatform/ 

    Alias /media/admin /usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/contrib/admin/media 
    Alias /media /var/www/vhosts/[sub domain]/socialmarketingplatform/media 
    <Location media=""> 
     SetHandler None 
    </Location> 

    LogLevel warn 
    ErrorLog /var/log/httpd/smp_error.log 
    CustomLog /var/log/httpd/smp_access.log combined 

    WSGIDaemonProcess luxdevelopment.net user=apache group=apache threads=25 
    WSGIProcessGroup luxdevelopment.net 

    WSGIScriptAlias//var/www/cgi-bin/socialmarketingplatform.wsgi 
</VirtualHost> 

我希望有人能幫助我解決這個問題。如果還有任何問題請告訴我。

+0

唉!不要把你的代碼放在你的DocumentRoot中!特別是如果你關心安全。 – 2011-04-05 13:05:16

+0

@ daniel-roseman:這就是爲什麼我的文檔根目錄是/ var/www/html /如果這還不夠安全,那麼你建議什麼?也許我誤解了你,我會看到如果我可以移動源文件夾外的來源。感謝您的建議。 – 2011-04-05 13:14:17

+0

那麼我的意思是你把DocumentRoot設置到你的代碼的位置,在vhost配置中。不要這樣做。 – 2011-04-05 13:35:53

回答

1

參見:

http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions#Apache_Process_Crashes

消息「腳本頭過早結束」往往表明你的代碼崩潰的守護進程。您可以通過在主Apache錯誤日誌文件中查找分段故障或類似消息來驗證此情況。如果您在主Apache配置和VirtualHost中啓用「LogLevel info」,則mod_wsgi將記錄更多關於守護進程重啓的信息。

快速的補救措施,如果僅運行後臺進程組中的應用是添加:

WSGIApplicationGroup %{GLOBAL} 

這將解決死機未正確寫入工作,爲Python打破第三方擴展模塊造成的分譯員。

除此之外,可以按常見問題中所述的共享庫版本不匹配。

+0

感謝您的評論,最終我沒有最終解決問題。 – 2011-04-19 13:00:24