2013-12-11 66 views
4

我正在用leiningen構建一個使用clojure的小型web應用程序。我有一些我需要訪問的json文件,我也使用在我的服務器上運行的批處理進行每晚更新。我在本地使用leiningen,但想要將uberjar部署到服務器。在那裏我可以更新jar文件中壓縮的json文件,也可以訪問uberjar之外的json文件。現在我要做的,後者使用ring.util.response /在路線的Compojure資源響應:使用leiningen訪問clojure項目目錄之外的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打包在一起的服務資源,因此它不適合提供需要單獨從應用程序更新的文件。

對於您的情況,我認爲Ring的resp/file-response更合適。它允許從文件系統中的指定位置提供文件,從而允許將json文件與應用程序分開。

事情是這樣的:

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

確切的文件夾名稱應該可能來自配置或系統環境,肖恩建議。

相關問題