2010-11-09 70 views
6

在apache上運行cherrypy與mod_wsgi以及另一個php應用程序。 cherrypy應用程序不是安裝在根目錄上,而是通過apache配置文件中的WSGIScriptAlias安裝在'localhost/apps/myapp'之類的東西上。WSGI應用程序中的cherrypy和相對路徑

在testapp.py,我曾嘗試以下,當我嘗試訪問本地主機/應用/ MYAPP在瀏覽器中:

app = cherrypy.tree.mount(MyApp(), '', 'settings.config') #FAILS WITH 404 

app = cherrypy.tree.mount(MyApp(), '/apps/myapp', 'settings.config') # WORKS 

第一個案例失敗的原因cherrypy希望位於服務器根目錄,而不是相對於通過apache中的WSGI掛載的位置。

有沒有一種首選的方法讓cherrypy應用程序相對於他們在apache下安裝的WSGIScriptAlias路徑工作?

基本上,我將在幾個不同的路徑下運行幾個cherrypy應用程序,並且會更喜歡如果apache處理調度(即cherrypy只運行應用程序並且不擔心相對路徑)。這樣,我可以避免每次更改服務器上的某些相對路徑時更新幾個不同的python文件/配置文件。

有什麼建議嗎?

順便說一句,在CherryPy的應用正在傳遞到WSGI應用程序如下:

app = cherrypy.tree.mount(HelloWorld(), '', 'settings.config') 
return app(environ, start_response) 

回答

1

我這樣做,儘管這將需要的CherryPy知道的相對路徑:

class Dir: pass 
root = Dir() 
root.apps = Dir() 
root.apps.myapp = MyApp() 
cherrypy.tree.mount(root) 

這允許我以任何我需要的方式構建應用程序。我使用nginx而不是Apache,但我認爲這不會有什麼區別。儘管如果你使用長路徑而沒有其他更多的東西,它會變得羅嗦。

cherrypy可以支持other dispatchers這可能更適合你想要做的,或者你可能需要編寫一個自定義的。