2010-06-02 43 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:( 「部分配置錯誤:'全局',選項:'tree.cpapp',值:'cherrypy.Application(cpapp.Root())'。配置值必須是有效的Python。」,'TypeError',(「unrepr could不解析名稱'cpapp'「,))

我知道我可以在調用quickstart之前從main.py文件中進行配置(例如,使用os.path.abspath(os.path.dirname(文件))),但如果可能,我更喜歡使用單獨配置文件的想法。

任何幫助,將不勝感激(如果它是相關的,我使用的CP 3.2與Python 3.1)

TIA 艾倫

回答

2

當您參考配置條目內的模塊,CherryPy的首先查找該模塊在sys.modules。因此,在您致電快速啓動之前,一種解決方案是import cpapp

但是如果在sys.modules的查找失敗,CherryPy會嘗試__import__模塊。既然這也是失敗的,你可能需要調查你的cpapp.py模塊是否確實是可導入的。

查看lib/reprconf.py模塊的所有細節。

+0

嗨fumanchu - 感謝您的答覆。據我可以看到沒有cpapp.py模塊導入,所以我不能嘗試該選項。我想反思一下,最好的解決方案可能是爲每個應用程序分別配置一個配置文件(我認爲這是設計用途),hard-code tools.staticdir.root,然後設置所有其他子文件夾(css, js等)相對於根。 – 2010-06-02 19:39:01

+0

cpapp.py是你聲明Root類的地方。例如,如果您的Root類在myapp/main.py中找到,那麼您的配置需要說「tree.cpapp = cherrypy.Application(myapp.main.Root())」 – fumanchu 2010-06-02 20:32:55