2010-06-02 3 views
2

하드 코딩 된 경로 대신 응용 프로그램 루트 폴더에 상대적인 정적 파일 루트 디렉터리를 만들려면 어떻게해야합니까? CP 지침에 따라CherryPy 구성 tools.staticdir.root 문제

(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())'. 구성 값은 유효한 파이썬이어야합니다.", 'TypeError', ("unrepr could 'cpapp'이름을 확인하지 못했습니다. ")))

quickstart가 호출되기 직전에 main.py 파일에서 구성 할 수 있음을 알고 있습니다 (예 : os.path.abspath (os.path.dirname (파일)))를 사용하여), 가능하면 별도의 구성 파일을 사용하는 것을 선호합니다.

어떤 도움을 주시면 감사하겠습니다, CherryPy 먼저 찾습니다

TIA 앨런

답변

2

는 구성 항목 내부의 모듈을 참조 (경우에 나는 파이썬 3.1 CP 3.2을 사용하고, 관련) 해당 모듈은 sys.modules입니다. 따라서 빠른 시작을 호출하기 직전에 해결 방법은 import cpapp입니다.

그러나 sys.modules에서 해당 조회가 실패하면 CherryPy가 모듈 __import__을 시도합니다. 또한 오류가 발생하기 때문에 cpapp.py 모듈을 실제로 가져올 수 있는지 여부를 조사해야 할 수도 있습니다.

자세한 내용은 lib/reprconf.py 모듈을 참조하십시오.

+0

안녕하세요 fumanchu - 답장을 보내 주셔서 감사합니다. 내가 볼 수있는 한, 가져올 cpapp.py 모듈이 없으므로이 옵션을 사용할 수 없습니다. 내 생각에 리플렉션에서 가장 좋은 솔루션은 각 어플리케이션 (의도 한 설계 용도로 추측), 하드 코드 tools.staticdir.root, 다른 모든 하위 폴더 (CSS, js 등)을 루트에 비례합니다. –

+0

cpapp.py는 루트 클래스를 선언 한 곳이면 어디서든 사용할 수 있습니다. 예를 들어, Root 클래스가 myapp/main.py에 있으면, "tree.cpapp = cherrypy.Application (myapp.main.Root())"라고 설정해야합니다. – fumanchu