我正在设置一个CherryPy应用程序,并希望将大部分配置设置放在.conf文件中,如下所示:
[global]
server.socketPort = 8080
server.threadPool = 10
server.environment = "production"
但是我还想用这样的代码设置一些字典:
conf = {'/': {'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(current_dir, 'templates')}}
cherrypy.quickstart(HelloWorld(), config=conf)
是否可以将两个配置组合成一个,然后将其传递给config quickstart选项?
答案 0 :(得分:11)
quickstart
适用于快速网站。如果你正在做任何像多次配置一样复杂的事情,那么是时候毕业了。查看快速启动功能的源代码(它并不可怕!):您要将其解压缩到启动脚本中。所以代替quickstart
,写下:
cherrypy.config.update(conffile)
cherrypy.config.update(confdict)
app = cherrypy.tree.mount(HelloWorld(), '/', conffile)
app.merge(confdict)
if hasattr(cherrypy.engine, "signal_handler"):
cherrypy.engine.signal_handler.subscribe()
if hasattr(cherrypy.engine, "console_control_handler"):
cherrypy.engine.console_control_handler.subscribe()
cherrypy.engine.start()
cherrypy.engine.block()
我们基本上在快速启动代码中添加了两行。首先,我们额外打电话给config.update
;将配置dict合并到全局配置中。第二,app.merge(confdict)
;这是为了将多个配置合并到每个应用程序中。
如果您希望文件配置覆盖dict,那么以相反的顺序执行这些操作是完全可以的。将基于字典的配置在HelloWorld._cp_config
中作为described粘贴在文档中也是可以的。
答案 1 :(得分:3)
这是两种不同的配置。 Cherrypy有两种配置:一种是全局配置,另一种是应用程序配置。您可以正常使用两者:
cherrypy.config.update('my_file.ini')
cherrypy.quickstart(HelloWorld(), config=conf)
请注意,您的示例配置文件是错误的 - 而不是server.socketPort
它应该是server.socket_port
而不是server.threadPool
它应该是server.threadpool
。查看config docs了解详情。