Frage

Dies ist meine Projekt.clj -Datei:

(defproject org.github.pistacchio.deviantchecker "0.9.0"
  :description "A one page application for keeping track of changes on deviantart.com gallieries"
  :dependencies [[org.clojure/clojure "1.2.1"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [enlive  "1.0.0"]
                 [compojure "0.6.4"]
                 [ring/ring-jetty-adapter "1.0.0-beta2"]]
  :dev-dependencies [[lein-ring "0.4.6"]]
  :ring {:handler org.github.pistacchio.deviantchecker.core/app}
  :main org.github.pistacchio.deviantchecker.core)

Und das mein Routing:

(defroutes main-routes
  (GET "/" [] (get-home))
  (GET "/add" [d] (add-gallery d))
  (GET "/delete" [d] (delete-gallery d))
  (GET "/check" [d] (check-gallery d))
  (route/resources "/")
  (route/not-found "Page not found"))

Ich habe einige statische Webdateien in Web /resources/public Und ich kann auf sie zugreifen. In dem Code muss ich auch auf einige Dateien auf dem Dateisystem zugreifen, die sich befinden /resources/data und /resources/tpl. Verwendung lein ring Server oder lein run, Der folgende Anruf funktioniert einwandfrei

(java.io.File. "resources/tpl/home.html")

aber beim Packen der Anwendung mit lein uberwar und einsatz unter tomcat es fehlschlägt und ich erhalte eine FilenotfoundException. Vielleicht liegt das daran, dass mit Lein die Aktuelles Arbeitsverzeichnis ist die Projektwurzel, während es unter Tomcat ist, ist es Tomcats Bin -Verzeichnis.

Zum Beispiel habe ich /resources/data/data.dat das wird im Krieg als /data/data.dat Daher funktioniert "Ressourcen/Data/Data.dat" unter Tomcat oder "Data/Data.dat" nicht in der Entwicklung.

Was ist übrigens die richtige Art, dies in Kompojure zu verwalten? Vielen Dank.

War es hilfreich?

Lösung

Sie können verwenden clojure.java.io/resource So greifen Sie auf Ressourcen zu, unabhängig davon, ob Sie sich im lokalen Dateisystem befinden oder in einem Glas/Krieg gepackt sind:

(require '[clojure.java.io :as io])
(io/reader (io/resource "public/some/file.txt")) ; file in resource classpath or $root/resources/public...

Sie sollten wahrscheinlich nicht versuchen, sie aus einem Verzeichnis zu laden, da Sie nicht sicher sein können, wo die Datei enden wird, wenn sie aus einem Glas/Krieg bereitgestellt wird (oder auch wenn sie sich überhaupt auf dem Dateisystem befindet) .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top