Total beginner question: In an example project I am testing I lose the REPL after having evaluated (run-jetty …)
. The server seems to work fine, but no more REPL for me. Anyone have a hint for me what I should check to see why it locks up like this?
Doesn't that block? If you're evaling from the repl, then the run-jetty
will block the REPL thread
the normal thing to do is to (def server (run-jetty....
)
to store the server instance in a var which you can then close later
i.e., <https://github.com/dharrigan/strip-nils/blob/master/src/strip_nils/main.clj>
line 46
@pez there's a :join?
option for run-jetty: https://ring-clojure.github.io/ring/ring.adapter.jetty.html
Thanks! It was the :join?
option I had missed. I took inspiration from the example @dharrigan provided and now have this:
(def ^:private server-ref (atom nil))
(defn start! []
(if-let [server @server-ref]
(log/warn "Server already running? (stop!) it first.")
(do
(api/init)
(reset! server-ref
(run-jetty api/app
{:port (Integer/valueOf
(or (System/getenv "port")
"6003")
10)
:join? false})))))
(defn stop! []
(if-let [server @server-ref]
(do (api/destroy)
(.stop server)
(reset! server-ref nil))
(log/warn "No server")))
(defn -main [& _args]
(start!))
Please let me know if it looks crazy to you. 😃