Serving static files with ring/compojure - from a war

Michael Neale picture Michael Neale · Oct 19, 2011 · Viewed 15k times · Source

Using ring (and the lein-ring tools) - I am able to serve up static files from "resources" etc as per the docs when running in development - however - when I package things up via lien uberwar I have no idea how to make it serve those files when running in a container. I see conflicting docs on wrap-resource, or setting :resource-path but none seem to work.

Answer

Michael Neale picture Michael Neale · Oct 19, 2011

As per Compojure's Getting Started Wiki, put route/resources below your paths:

(defroutes main-routes
  (GET "/" [] "<h1>Hello World Wide Web!</h1>")
  (route/resources "/")
  (route/not-found "Page not found"))

...and then, create a folder resources/public in your project, put your static files there. When referring to these files, the /resources/public is implicit, so you can write something like: (include-css "/css/site.css").

Here is an example that deploys to cloudbees.