CherryPy объединяет конфигурацию на основе файлов и словарей - PullRequest
6 голосов
/ 21 октября 2010

Я настраиваю приложение 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)

Можно ли объединить оба конфига в один, а затем передать его в опцию быстрого запуска конфигурации?

Ответы [ 2 ]

11 голосов
/ 22 октября 2010

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);это для объединения нескольких конфигов в каждое приложение.

Совершенно нормально делать это в обратном порядке, если вы хотите, чтобы файл конфигурации переопределял dict.Также можно вставить конфиг на основе dict в HelloWorld._cp_config как , как описано в документации.

3 голосов
/ 21 октября 2010

Это две разные конфигурации.Cherrypy имеет две конфигурации: одна - глобальная конфигурация, а другая - конфигурация приложения.Вы можете использовать оба в обычном порядке:

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

Обратите внимание, что ваш пример файла конфигурации неправильный - вместо server.socketPort он должен быть server.socket_port и вместо server.threadPool он должен быть server.threadpool.Проверьте config docs для получения дополнительной информации.

...