【发布时间】:2013-12-04 00:43:59
【问题描述】:
在 Java 1.7.0_21 Java HotSpot(TM) 64 位服务器虚拟机上运行 Leiningen 2.3.4
我无法连接到 nREPL 服务器。
我使用lein new luminus 设置了一个新项目,然后将依赖项添加到drawbridge ([com.cemerick/drawbridge "0.0.6"])。
我为 repl 添加了一个处理程序路由,如下所示(基于https://devcenter.heroku.com/articles/debugging-clojure):
(def drawbridge-handler
(-> (cemerick.drawbridge/ring-handler)
(wrap-keyword-params)
(wrap-nested-params)
(wrap-params)
(wrap-session)))
(defn wrap-drawbridge [handler]
(fn [req]
(if (= "/repl" (:uri req))
(drawbridge-handler req)
(handler req))))
并将wrap-drawbridge 添加到我的中间件中。
然后我使用
启动服务器lein ring server-headless
连接似乎运行良好,因为在 http:localhost:3000/repl 上执行 GET 请求会产生响应:["[\n","\n]"]
但我无法连接到 REPL:
> lein repl :connect 0.0.0.0:3000/repl
Connecting to nREPL at 0.0.0.0:3000/repl
然后,过了一段时间:
SocketException The transport's socket appears to have lost its connection to the nREPL server
clojure.tools.nrepl.transport/bencode/fn--4287/fn--4288 (transport.clj:95)
clojure.tools.nrepl.transport/bencode/fn--4287 (transport.clj:95)
clojure.tools.nrepl.transport/fn-transport/fn--4261 (transport.clj:42)
clojure.core/binding-conveyor-fn/fn--4107 (core.clj:1836)
java.util.concurrent.FutureTask$Sync.innerRun (FutureTask.java:334)
java.util.concurrent.FutureTask.run (FutureTask.java:166)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
java.lang.Thread.run (Thread.java:722)
Bye for now!
我错过了什么吗?
编辑:
在我的处理程序中添加了以下日志记录代码:
(defn wrap-drawbridge [handler]
(fn [req]
(if (= "/repl" (:uri req))
(do (println "IN REPL ")
(drawbridge-handler req))
(handler req))))
按照建议与lein repl :connect http://localhost:3000/repl 连接时,我看到IN REPL 行在服务器控制台上以无限循环的形式打印。
【问题讨论】:
-
有关吊桥服务器和客户端的最新示例,请查看nREPL over HTTP(s) with Drawbridge in 2020。在寻找 Drawbridge 时,这仍然是一个热门话题,因此最好将人们指向一个更新的代码示例 :-)
标签: clojure leiningen read-eval-print-loop nrepl