python - WSGI 应用程序中的 cherrypy 和相对路径

标签 python cherrypy

在 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)

最佳答案

我正在这样做,尽管这需要 cherrypy 知道相对路径:

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

这使我能够以我需要的任何方式构建应用程序。我使用的是 nginx 而不是 Apache,但我认为这不会有任何区别。尽管如果您使用长路径且中间没有太多其他内容,它会变得有点冗长。

cherrypy可以支持other dispatchers这可能更适合您正在尝试做的事情,或者您可能需要编写一个自定义的。

关于python - WSGI 应用程序中的 cherrypy 和相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129929/

相关文章:

python - 为什么 gethostbyaddr(gethostname()) 返回我的 IPv6 IP?

python - 在两列中列出字典的内容

Python - flask 默认路由可能吗?

python - cherrypy:关闭发送带有静态目录和文件的 cookie

jquery - 如何将 javascript 数组发送到 cherrypy

python - web2py 下拉菜单从具有主要和子类别的数据库生成

使用迭代查找最大值和最小值时出现 Python TypeError

python - 访问 spyder 历史日志

jquery - CherryPy 如何用 JSON 响应?

python - 使用 CherryPy 为 Django 1.7 应用程序提供服务