2012-12-03 41 views
1

我想在Ubuntu下運行apache2/mod_wsgi下的CherryPy應用程序。我正在遵循教程here,我的配置幾乎完全相同。在訪問站點的根目錄時,我收到500內部服務器錯誤。在日誌中唯一的錯誤是:在mod_wsgi下運行CherryPy

[Mon Dec 03 04:43:06 2012] [error] [client 64.189.251.239] Premature end of script headers: index.py 

我嘗試了好幾種變化的教程,但我沒有收到任何顯著的錯誤。有任何想法嗎?

我的Apache VirtualHost

... 
    WSGIScriptAlias//var/www/example.com/uba/index.py 
DocumentRoot /var/www/example.com/uba/ 
<Directory /> 
    Options +ExecCGI Indexes FollowSymLinks 
    AllowOverride All 
</Directory> 

<Directory /var/www/example.com/uba/> 
    Options +ExecCGI -Indexes -FollowSymLinks -MultiViews 
    WSGIApplicationGroup %{GLOBAL} 
    AllowOverride All 
    Order allow,deny 
    allow from all 
</Directory> 
... 

我index.py腳本:

#!/usr/bin/python 

import sys 
sys.stdout = sys.stderr 

import atexit 
import threading 
import cherrypy 

cherrypy.config.update({'environment': 'embedded'}) 

if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0: 
    cherrypy.engine.start(blocking=False) 
    atexit.register(cherrypy.engine.stop) 

class Root(object): 
    def index(self): 
     return 'Hello World!' 
    index.exposed = True 

application = cherrypy.Application(Root(), script_name=None, config=None) 

更新#1:

運行這個很基本的WSGI應用程序產生完全相同的錯誤:

#!/usr/bin/python 

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 

    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 

    return [output] 

回答

1

我建議你用一個超級簡單的wsgi應用替換你的cherrypy index.py腳本來測試你的apache配置。

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 

    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 

    return [output] 

確保在嘗試使用cherrypy腳本之前有效。

+0

即使這樣也會產生相同的錯誤。我沒有想過試試這個,因爲我在wsgi下運行了幾個django應用程序也沒有問題。必須關閉apache配置。 – WilHall

+1

哦,我覺得很蠢。在配置中顯然需要'AddHandler wsgi-script .py' - 我假設'WSGIScriptAlias'會繞過那個 – WilHall

+0

好吧,我現在只是猜測,但是你的index.py腳本可執行文件?也許在應用程序函數中放置一個打印語句來查看它是否被調用。 –