2010-10-21 50 views
6

我设置了一个CherryPy的应用,并希望有我的大部分配置设置的.conf文件是这样的:CherryPy的合并文件和基于字典的配置

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

是否有可能既CONFIGS合并成一个,然后将其传递到配置快速启动选项?

回答

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;将配置字典合并到全局配置中。其次,app.merge(confdict);这是为了将多个配置合并到每个应用程序中。

如果您希望文件配置覆盖字典,那么以相反顺序执行这些操作完全可以。在文档中将基于字典的配置文件HelloWorld._cp_config粘贴为described也是可以的。

+0

工程很好。谢谢! – jamesaharvey 2010-10-21 23:14:59

2

这些是两种不同的配置。 Cherrypy有两种配置:一种是全局配置,另一种是应用配置。您可以同时使用正常:

cherrypy.config.update('my_file.ini') 
cherrypy.quickstart(HelloWorld(), config=conf) 

请注意,例如配置文件是错误的 - 而不是server.socketPort应该server.socket_port和替代server.threadPool应该server.threadpool。请检查config docs了解更多信息。

+0

好吧,但我真正想要做的是在my_file.ini中指定大多数配置值,还有一些需要代码的附加值。可以做到两者吗? – jamesaharvey 2010-10-21 17:35:30