CherryPy结合了基于文件和字典的配置

时间:2010-10-21 16:34:15

标签: python configuration cherrypy

我正在设置一个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选项?

2 个答案:

答案 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了解详情。