使用环/复合器连接到clojure nREPL时出现问题
在Java 1.7.0ØJava HotSpot(TM)64位服务器VM上运行Leiningen 2.3.4 我无法连接到nREPL服务器 我使用使用环/复合器连接到clojure nREPL时出现问题,clojure,leiningen,read-eval-print-loop,nrepl,Clojure,Leiningen,Read Eval Print Loop,Nrepl,在Java 1.7.0ØJava HotSpot(TM)64位服务器VM上运行Leiningen 2.3.4 我无法连接到nREPL服务器 我使用leinnewluminus设置了一个新项目,然后向drawbridge添加了一个依赖项([com.cemerick/drawbridge“0.0.6”]) 我为repl添加了如下处理程序路由(基于): 并将包装吊桥添加到我的中间件中 然后,我使用 lein-ring服务器无头 连接似乎工作正常,因为在http:localhost:3000/repl上
leinnewluminus
设置了一个新项目,然后向drawbridge添加了一个依赖项([com.cemerick/drawbridge“0.0.6”]
)
我为repl添加了如下处理程序路由(基于):
并将包装吊桥
添加到我的中间件中
然后,我使用
lein-ring服务器无头
连接似乎工作正常,因为在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
正如建议的那样,我看到REPL
中的行在服务器控制台上以无限循环打印 您是否已确保确实有请求进入您的服务器(例如,通过打印行)
然而,我的第一个猜测是,lein repl:connect
的行为会有所不同,这取决于您是向其传递IP/端口对还是完全限定的URL。由于drawbridge
似乎可以通过HTTP访问nREPL,我建议您尝试:
lein repl :connect http://localhost:3000/repl
这并不是一个直接的答案,但我发现我没有以正确的方式处理这个问题 Luminus创建一个
项目名称.repl
命名空间,该命名空间应用于交互式开发
我发现我可以通过添加到我的项目.clj
:repl-options {
:init-ns project-name.repl
:init (start-server)}
然后用lein repl
启动服务器
比设置nREPL中间件简单得多 您需要在中间件列表的第一个位置添加
缠绕吊桥
如果你做那样的事
(def app (-> #'all-routes
wrap-drawbridge
...
...
...
))
它就像一个魔咒。我添加了一些日志记录,它看起来确实是连接的,但它的循环几乎就像一个无限循环(请参见我上面的编辑)。从自述文件中:Drawbridge与Clojure 1.2.0-1.4.0兼容。
。不确定这是否仍然有效,但这可能明确表明,本应使用的nREPLdrawbridge
版本与Leiningen中包含的客户端不完全兼容。那么,当您尝试使用旧版本的Leiningen连接到服务器时会发生什么情况?当您切换到Clojure 1.4.0时,这听起来像是一种损失。也许我做得不对。有没有办法将REPL连接到正在运行的服务器(使用ring/compojure)进行实时调试?有关Drawbridge服务器和客户端签出的最新示例。在寻找吊桥时,这仍然是一个热门话题,因此最好让人们看一个更流行的代码示例:-)
(def app (-> #'all-routes
wrap-drawbridge
...
...
...
))