通过配置文件在CherryPy上嫁接WSGI应用

时间:2019-04-25 08:41:58

标签: wsgi cherrypy

我在CherryPy服务器中嵌入(移植了)WSGI应用程序。

from my_app import application
import cherrypy

if __name__ == '__main__':

    cherrypy.config.update("server.conf")
    cherrypy.tree.graft(application, "/good_stuff/")

    cherrypy.engine.start()
    cherrypy.engine.block()

server.conf是定义服务器属性等的静态配置文件。

[global]                                                  
server.socket_host = "0.0.0.0"
server.socket_port = 8087
server.thread_pool = 30

现在,我想使用 cherryd 实用程序将CherryPy作为守护程序运行,因此我应该将代码中的嫁接部分变为静态配置。

[global]
...
tree.graft = {my_app.application:"/good_stuff/"}

我找不到与此相关的工作示例,但这显然不行:

AttributeError: 'ReloaderApp' object has no attribute 'rstrip'

在我尝试启动它时:

$ cherryd -c server.conf -i my_app

想法?

1 个答案:

答案 0 :(得分:0)

解决方案是:

    [global]
    ...
--- tree.graft = {my_app.application:"/good_stuff"}
+++ tree.graft = {"/good_stuff":my_app.application}

无论如何,我是从this问题中猜到的。我不确定CherryPy文档中是否可以看到这一点。


在阅读了Bernd Haug的答案here之后,我意识到tree.graft(value)会转换为cherrypy._cpconfig._tree_config_handler("graft", value),这是第一个“随意移植”的标签。我可以打电话给tree.foo,但仍然在幕后(如果Bern Haug是正确的话),我实际上是cherrypy.tree.graft-正在使用WSGI应用程序。