2010-06-02 12 views
2

Comment puis-je faire mes répertoires racine de fichiers statiques par rapport à mon dossier racine de l'application (au lieu d'un chemin codé en dur)?CherryPy configuration tools.staticdir.root problème

Conformément aux instructions du CP (http://www.cherrypy.org/wiki/StaticContent) Je l'ai essayé ce qui suit dans mon fichier de configuration:

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

mais quand je lance cherrpy.quickstart(rootclass, script_name='/', config=config_file) j'obtiens l'erreur suivante

builtins.ValueError: ("Erreur de configuration dans la section: 'global', option: 'tree.cpapp', valeur: 'cherrypy.Application (cpapp.Root())' Les valeurs de configuration doivent être Python.", 'TypeError', ("unrepr pourrait pas résoudre le nom 'cpapp' ",))

Je sais que je peux faire la configuration depuis le fichier main.py juste avant l'appel de quickstart (par ex. en utilisant os.path.abspath (os.path.dirname (fichier))), mais je préfère utiliser l'idée d'un fichier de configuration séparé si possible.

Toute aide serait appréciée (dans le cas où il est pertinent, je me sers CP 3.2 avec Python 3.1)

TIA Alan

Répondre

2

Lorsque vous faites référence à un module à l'intérieur des entrées de configuration, CherryPy recherche d'abord ce module en sys.modules. Donc, une solution serait import cpapp juste avant d'appeler quickstart. Mais si cette recherche dans sys.modules échoue, CherryPy essaie de __import__ le module. Comme cela échoue également, vous devrez peut-être vérifier si votre module cpapp.py est vraiment importable.

Voir le module lib/reprconf.py pour tous les détails sanglants.

+0

Salut fumanchu - merci pour la réponse. Autant que je puisse voir, il n'y a pas de module cpapp.py à importer, donc je ne peux pas essayer cette option. Je pense à la réflexion que la meilleure solution peut être d'avoir un fichier de configuration séparé pour chaque application (ce que je suppose était l'utilisation prévue), hard-code tools.staticdir.root, puis définir tous les autres sous-dossiers (css, js, etc.) par rapport à la racine. –

+0

cpapp.py est partout où vous avez déclaré votre classe Racine. si votre classe Racine est trouvée dans myapp/main.py, par exemple, alors votre config doit dire "tree.cpapp = cherrypy.Application (myapp.main.Root())" – fumanchu