2010-06-02 3 views
2

Как я могу создать свои корневые каталоги статического файла относительно корневой папки приложения (вместо жестко закодированного пути)?Проблема с конфигурацией CherryPy tools.staticdir.root

В соответствии с инструкциями CP (http://www.cherrypy.org/wiki/StaticContent) Я попытался следующие в моем файле конфигурации:

tree.cpapp = cherrypy.Application(cpapp.Root()) 
tools.staticdir.root = cpapp.current_dir 

, но когда я бегу cherrpy.quickstart(rootclass, script_name='/', config=config_file) я получаю следующую ошибку

builtins.ValueError: («Ошибка конфигурации в разделе:« global », опция:« tree.cpapp », значение:« cherrypy.Application (cpapp.Root()) ». Значения конфигурации должны быть действительными Python.», «TypeError», («unrepr could не разрешать имя «cpapp»,))

Я знаю, что могу выполнить настройку из файла main.py перед вызовом quickstart (например. используя os.path.abspath (os.path.dirname (файл))), но я предпочитаю использовать идею отдельного файла конфигурации, если это возможно.

Любая помощь будет оценена (в случае, если это уместно, я использую CP 3.2 с Python 3.1)

ТИА Alan

ответ

2

При обращении к модулю внутри записей конфигурации, CherryPy первый ищет этот модуль находится в sys.modules. Таким образом, одно решение будет состоять из import cpapp непосредственно перед вызовом quickstart.

Но если этот поиск в sys.modules не удается, CherryPy пытается __import__ модуля. Так как это также не работает, вам может потребоваться выяснить, действительно ли ваш модуль cpapp.py действительно является импортируемым.

См. Модуль lib/reprconf.py для всех подробностей.

+0

Hi fumanchu - спасибо за ответ. Насколько я вижу, нет модуля cpapp.py для импорта, поэтому я не могу попробовать этот параметр. Я считаю, что лучшим решением может быть отдельный файл конфигурации для каждого приложения (который, как я предполагал, был предназначен для использования), hard-code tools.staticdir.root, а затем установить все другие подпапки (css, js и т. д.) относительно корня. –

+0

cpapp.py - это место, где вы указываете свой класс Root. если ваш класс Root найден в myapp/main.py, например, тогда ваш конфиг должен сказать: «tree.cpapp = cherrypy.Application (myapp.main.Root())» – fumanchu