2010-11-09 69 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这可能更适合你想要做的,或者你可能需要编写一个自定义的。