在apache上运行带有mod_wsgi的cherrypy以及另一个php应用程序。 cherrypy应用程序不是安装在root上,而是安装在apache配置文件中通过WSGIScriptAlias的“localhost / apps / myapp”。
在testapp.py中,我尝试了以下操作,当我尝试在浏览器中访问localhost / apps / 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应用程序相对于它们在WSGIScriptAlias下的apache中安装的路径有效?
基本上,我将在几个不同的路径下运行几个cherrypy应用程序,并且如果apache处理了调度(例如,cherrypy只运行应用程序并且不担心相对路径),我更愿意。这样,每当服务器上的一些相对路径发生变化时,我就可以避免更新几个不同的python文件/配置文件。
有什么建议吗?
顺便说一下,cherrypy应用程序当前传递给wsgi应用程序,如下所示:
app = cherrypy.tree.mount(HelloWorld(), '', 'settings.config')
return app(environ, start_response)
答案 0 :(得分:1)
我这样做,虽然这需要樱桃知道相对路径:
class Dir: pass
root = Dir()
root.apps = Dir()
root.apps.myapp = MyApp()
cherrypy.tree.mount(root)
这允许我以我需要的任何方式构建应用程序。我使用的是nginx,而不是Apache,但我认为它不会有任何区别。虽然如果你使用长路径并且其间没有太多其他东西,它会有点罗嗦。
cherrypy可以支持other dispatchers,它可能更适合您正在尝试的内容,或者您可能需要编写自定义内容。
答案 1 :(得分:0)
应该怎么做
app = cherrypy.tree.mount(MyApp(), '', 'settings.config')
解决http://localhost/apps/myapp? 你试过http://localhost/或http://localhost/MyApp。
在Apache中定义WSGIScriptAlias的地方也很重要。 vhost,位置?