2010-10-21 3 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) 

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

ответ

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; который объединяет config dict в глобальную конфигурацию. Во-вторых, app.merge(confdict); это для объединения нескольких конфигураций в каждое приложение.

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

+0

Отлично работает. Благодаря! – jamesaharvey

2

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

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

Смежные вопросы