Skip to content

Instantly share code, notes, and snippets.

@micha
Last active May 5, 2016 16:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save micha/d341d8f5b90c34ee90d114e50c37a7ab to your computer and use it in GitHub Desktop.
Save micha/d341d8f5b90c34ee90d114e50c37a7ab to your computer and use it in GitHub Desktop.
build.boot.clj
(set-env!
:source-paths #{"src"}
:dependencies '[[ring "1.4.0"]])
(require '[ring.adapter.jetty :refer [run-jetty]]
'[ring.middleware.reload :refer [wrap-reload]])
(defn start-server [port handler]
(boot.util/info "starting server on port %d\n" port)
(let [server (run-jetty handler {:port port :join? false})]
(fn []
(boot.util/info "stopping server on port %d\n" port)
(.stop server))))
(defn cp-dirs
"Directories on classpath -- ring-reload will reload code in these dirs."
[]
(->> (Thread/currentThread)
(.getContextClassLoader)
(iterate (memfn getParent))
(take-while identity)
(mapcat (memfn getURLs))
(filter (comp (memfn isDirectory) clojure.java.io/file))
(map (memfn getPath))))
(def app
(-> (fn [req]
{:status 200
:headers {"content-type" "text/plain"}
:body "hello world"})
(wrap-reload {:dirs (cp-dirs)})))
(deftask serve
[p port PORT int "The port to listen on (default 8080)."]
(let [port (or port 8080)
server (delay (start-server port #'app))]
(cleanup (@server))
(with-pass-thru [fs] @server)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment