2013-12-11 8 views
4

나는 leiningen과 함께 clojure를 사용하여 작은 웹 앱을 빌드하고있다. 나는 액세스해야하는 특정 json 파일을 가지고 있으며, 서버에서 실행중인 배치 프로세스를 사용하여 야간에 업데이트합니다. 로컬로 leiningen을 사용하고 있지만 서버에 uberjar를 배포하려고합니다. json 파일 내부에서 압축 된 json 파일을 업데이트하거나 uberjar 외부에있는 json 파일에 액세스하는 방법이 있습니다. 지금 나는 compojure의 경로에서 후자의 사용 ring.util.response/자원 응답을하려고 오전 : leiningen을 사용하여 클로저에 프로젝트 디렉토리 외부의 JSON 파일에 액세스

 (GET "/json/:filename" [filename] 
     (resp/resource-response 
      (str filename ".json") 
      {:root "~/internal_dashboard/app/json/"})) 

내 응용 프로그램이 파일에 액세스하려고 시도

나는 404 오류가 발생합니다. 누구든지 가능한 해결책을 알고 있습니까?

답변

3

JVM이 경로에서 ~을 확장하지 않으면 System/getenv을 호출하여 홈 디렉토리를 가져 와서 경로를 빌드하십시오.

{:root (str (System/getenv "HOME") "/internal_dashboard/app/json/")} 

Tomcat은 종종 자체 사용자로 실행되므로 올바른 집 주소 나 경로를 철저히 입력하십시오. 또한 해당 디렉토리에 액세스 할 수 있도록 tomcat을 구성해야 할 수도 있습니다.

0

resp/resource-response은 jar와 함께 패키지 된 리소스를 제공하기위한 것이므로 응용 프로그램과 별도로 업데이트해야하는 파일을 제공하는 데는 적합하지 않습니다.

귀하의 경우 나는 반지의 resp/file-response이 더 적합하다고 생각합니다. 파일 시스템의 특정 위치에서 파일을 제공 할 수 있으므로 json 파일을 앱과 분리하여 보관할 수 있습니다. 이 같은

뭔가 : 숀 제안

(GET "/json/:filename" [filename] (resp/file-response 
            (str filename ".json") 
            {:root "/some/folder/"})) 

정확한 폴더 이름은 아마, 구성이나 시스템 환경에서 와야한다.