Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用环/复合器连接到clojure nREPL时出现问题_Clojure_Leiningen_Read Eval Print Loop_Nrepl - Fatal编程技术网

使用环/复合器连接到clojure 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上

在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上执行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兼容。
。不确定这是否仍然有效,但这可能明确表明,本应使用的nREPL
drawbridge
版本与Leiningen中包含的客户端不完全兼容。那么,当您尝试使用旧版本的Leiningen连接到服务器时会发生什么情况?当您切换到Clojure 1.4.0时,这听起来像是一种损失。也许我做得不对。有没有办法将REPL连接到正在运行的服务器(使用ring/compojure)进行实时调试?有关Drawbridge服务器和客户端签出的最新示例。在寻找吊桥时,这仍然是一个热门话题,因此最好让人们看一个更流行的代码示例:-)
(def app (-> #'all-routes
               wrap-drawbridge
               ...
               ...
               ...
               ))