当通过 reload-wrap 从 Emacs Cider REPL 中启动 Ring 服务器时,REPL 会阻塞。我该怎么做才能在开发期间拥有此代码重新加载功能并能够同时继续使用 Cider REPL。
此外,通过点击 Cc CC 从 REPL 中取消正在运行的服务器“进程”后,我无法在同一端口上重新启动它,我收到“地址已在使用”错误。
我知道这可以通过 Stuart Sierra 的组件系统实现。这是唯一的方法还是可能有更简单的解决方案?
当您启动环服务器(我猜是使用码头)时,您并没有告诉它不要将当前线程加入正在运行的服务器。您需要将join?
选项集添加到false
:
(run-jetty my-handler {:join? false})
您还应该绑定此表达式的返回值,即服务器实例,以便稍后停止它:
(def my-server (run-jetty my-handler {:join? false}))
;; some time later
(.stop my-server)
停止服务器将关闭服务器套接字并使其可用于未来的服务器实例。
更简单的解决方案,在 dev/user.clj 中的某处存储与组件相同的 web 服务器。并配置cider-refresh-fn
变量来启动和停止网络服务器。实际上,想法与组件方法相同,但是您不必使用它,