Fork me on GitHub
#ring
<
2021-03-27
>
pez14:03:57

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?

dharrigan14:03:14

Doesn't that block? If you're evaling from the repl, then the run-jetty will block the REPL thread

dharrigan14:03:30

the normal thing to do is to (def server (run-jetty....)

dharrigan14:03:46

to store the server instance in a var which you can then close later

pez16:03:53

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. 😃