Pregunta

Este es mi archivo Project.clj:

(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)

Y esta mi enrutamiento:

(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"))

Tengo algunos archivos estáticos web en /resources/public Y puedo acceder a ellos. En el código también necesito acceder a algunos archivos en el sistema de archivos que se encuentran en /resources/data y /resources/tpl. Usando lein ring servidor o lein run, la siguiente llamada funciona bien

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

Pero al empacar la aplicación con lein uberwar e implementando bajo Tomcat falla y obtengo una FileNotFoundException. Tal vez esto es porque con Lein el directorio de trabajo actual es la raíz del proyecto mientras está bajo Tomcat es el directorio bin de Tomcat.

Por ejemplo, tengo /resources/data/data.dat que se llena en la guerra como /data/data.dat Por lo tanto, "recursos/data/data.dat" no funciona en Tomcat o "data/data.dat" no funciona en el desarrollo.

Por cierto, ¿cuál es la forma correcta de manejar esto en CompoJure? Gracias.

¿Fue útil?

Solución

Puedes usar clojure.java.io/resource Para acceder a los recursos, ya sean en el sistema de archivos local o que estén empacados en un jar/guerra:

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

Probablemente no debería intentar cargarlos desde un directorio, ya que no puede estar seguro de dónde terminará el archivo cuando se implementa desde un jar/guerra (o incluso si está en el sistema de archivos, probablemente) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top