在Emacs Cider REPL中重新加载环

时间:2016-03-29 11:40:23

标签: emacs clojure cider

当通过reload-wrap从Emacs Cider REPL中启动Ring服务器时,REPL会阻塞。我可以做些什么才能在开发过程中获得这种代码重新加载功能,并且能够同时继续使用Cider REPL。

另外,通过点击C-c C-C从REPL中取消正在运行的服务器“进程”后,我无法在同一端口重启它,我收到“已经在使用的地址”错误。

我知道Stuart Sierra的组件系统可以实现这一点。这是唯一的方法还是可能有更简单的解决方案?

2 个答案:

答案 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服务器。 实际上,想法与组件方法相同,但是你不必使用它,