当通过reload-wrap从Emacs Cider REPL中启动Ring服务器时,REPL会阻塞。我可以做些什么才能在开发过程中获得这种代码重新加载功能,并且能够同时继续使用Cider REPL。
另外,通过点击C-c C-C从REPL中取消正在运行的服务器“进程”后,我无法在同一端口重启它,我收到“已经在使用的地址”错误。
我知道Stuart Sierra的组件系统可以实现这一点。这是唯一的方法还是可能有更简单的解决方案?
答案 0 :(得分:1)
当你启动你的响铃服务器(我想使用jetty)你并没有告诉它不要将当前线程加入正在运行的服务器。您需要将join?
选项设置为false
:
(run-jetty my-handler {:join? false})
您还应该绑定此表达式的返回值,该表达式是服务器实例,因此您可以稍后停止它:
(def my-server (run-jetty my-handler {:join? false}))
;; some time later
(.stop my-server)
停止服务器将关闭服务器套接字并使其可用于将来的服务器实例。
答案 1 :(得分:1)
更简单的解决方案,用于存储web服务器,就像组件在dev / user.clj中的某个地方一样。并配置0-0-0-2
变量以启动和停止Web服务器。
实际上,想法与组件方法相同,但是你不必使用它,