我在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
想法?
解决方案是:
[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是对的),我实际上是在使用WSGI应用程序。