如何在不重新启动repl的情况下停止jetty服务器

时间:2016-10-28 22:55:35

标签: clojure jetty boot-clj

假设我有一个使用'[pandeiro.boot-http :refer [serve]]的简单boot-clj任务。如果我进行更改并需要重新启动任务,则会抱怨端口已在使用中。有没有办法杀死jetty服务器而不必重新启动repl?

2 个答案:

答案 0 :(得分:0)

如果你只想要这么多人使用这种模式:

(defonce running-server (atom nil))
(defn stop-server [] (@running-server))
(defn go []
  (reset! running-server
            (org.httpkit.server/run-server 
             ... your stuff here ...))

如果这是一个较长期的项目,从组件框架开始,以更优雅的方式解决了这个问题,并允许许多依赖组件(因此名称)。在开始下一个项目之前,这是good place to get started并且值得一读。

答案 1 :(得分:0)

pandeiro.boot-http支持重新加载处理程序,因此您无需重新启动serve任务。您需要使用:reload set to true配置它:

在命令行上:

boot serve -H myapp.server/app -R wait

或者在你的启动脚本中:

(boot (serve :handler 'myapp.server/app :reload true) (wait))

对于常规静态文件serve始终从磁盘返回当前版本,因此无需为它们重新加载。

如果您确实需要重新启动任务,我猜您可能会受到pandeiro.boot-httpissue的影响,可能需要与其维护人员联系。