代码之家  ›  专栏  ›  技术社区  ›  jamesaharvey

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

  •  6
  • jamesaharvey  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  11
  •   fumanchu    14 年前

    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 在文件里。

        2
  •  3
  •   nosklo    14 年前

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

    请注意,您的示例配置文件是错误的——而不是 server.socketPort 应该是 server.socket_port 而不是 server.threadPool 应该是 server.threadpool config docs 更多信息。