Debugging 如何连接苹果酒&x27;将调试器添加到Luminus web应用程序?

Debugging 如何连接苹果酒&x27;将调试器添加到Luminus web应用程序?,debugging,clojure,cider,luminus,Debugging,Clojure,Cider,Luminus,我有一个Luminus项目,服务器运行在localhost:7000上。我使用cider connect将自己连接到这个repl,但我遇到了下面的墙: ;苹果酒0.10.0快照(包装:20150820.852)\ (Java 1.7.0_51,Clojure 1.7.0,nREPL 0.2.10) 警告:不支持以下必需的nREPL操作: apropos类路径完整eldoc格式代码格式edn信息检查pop\ 检查推送检查刷新宏展开ns列表ns变量ns路径刷新\ 资源堆栈跟踪切换跟踪变量切换跟踪ns

我有一个Luminus项目,服务器运行在
localhost:7000
上。我使用
cider connect
将自己连接到这个repl,但我遇到了下面的墙:

;苹果酒0.10.0快照(包装:20150820.852)\
(Java 1.7.0_51,Clojure 1.7.0,nREPL 0.2.10)
警告:不支持以下必需的nREPL操作:
apropos类路径完整eldoc格式代码格式edn信息检查pop\
检查推送检查刷新宏展开ns列表ns变量ns路径刷新\
资源堆栈跟踪切换跟踪变量切换跟踪ns未定义
请安装(或更新)苹果酒nrepl 0.10.0-SNAPSHOT并重新启动苹果酒
我想调试至少需要其中一个;对函数进行仪器化的尝试

clojure.lang.LispReader$ReaderException:java.lang.RuntimeException:\
没有标签dbg的读取器功能

我可以使用“普通”Clojure项目进行调试。我已尝试将通常位于
~/.lein/profiles.clj
中的样板文件添加到项目的
项目.clj
中,但没有效果:

:profiles/dev {:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
               :plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"]]}

如何将CIDER的调试器连接到此web应用程序?

为了节省有类似问题的人的时间,我将在这里发布摘要作为答案。 感谢clojure emacs/refactor nrepl的gitter和Sean Allred的Benedek Fazekas


要将
Cider
连接到
Luminus
应用程序(以及可能使用嵌入式
nrepl服务器作为运行时连接到该服务器的机会的任何其他应用程序),您应该做两件事:

  • 将所有需要的中间件作为
    :handler
    提供给
    clojure.tools.nrep.server/start server
    。为此,您应该在
    lein
    可以找到的地方列出包含中间件的库(例如在
    project.clj
    :dependencies

  • 运行启动嵌入式
    nrepl服务器的应用程序,并使用
    Cider connect
    Cider
    连接到该服务器

除了苹果酒nrepl
之外,我想使用所需的
重构nrepl
。通过示例项目,第一件事可以这样做:

(ns guestbook.core
  (:require [guestbook.handler :refer [app init destroy]]
            [immutant.web :as immutant]
            [guestbook.db.migrations :as migrations]
            [clojure.tools.nrepl.server :as nrepl]
            [clojure.tools.logging :as log]
            [environ.core :refer [env]]
            [cider.nrepl :refer [cider-middleware]]
            [refactor-nrepl middleware])
  (:gen-class)) 

    ...

(defn cider&cljr-nrepl-handler []
      (apply nrepl/default-handler (cons #'refactor-nrepl.middleware/wrap-refactor
                                   (map resolve cider-middleware))))
        
(defn start-app
  "e.g. lein run 3000"
  [[port]]
  (let [port (http-port port)]
    (.addShutdownHook (Runtime/getRuntime) (Thread. stop-app))
    (when-let [repl-port (env :nrepl-port)]
      (repl/start {:port (parse-port repl-port)
                   :handler (cider&cljr-nrepl-handler)}))
    (http/start {:handler app
                 :init    init
                 :port    port})))
然后,您可以使用
lein run
运行您的
Luminus
应用程序,并使用
Cider connect
M-x Cider connect
C-C M-C
)将其与
Cider
连接,默认连接url为
localhost:7000


据推测,
Luminus
中的嵌入式
nrepl服务器
将在应用程序已经部署到某个地方并且您希望进行一些实时调试时使用。 对于当地发展,有标准的方法:

  • 在项目根目录中运行
    lein repl
    <代码>苹果酒
    将在
    苹果酒插孔
    C-C M-j
    )上的
    lein repl:headless
    执行此项工作
  • 它应该在
    yourapp.core
    命名空间中启动
    repl
    ,您可以在其中运行
    (http/start{:port 3000:init init:handler app})
    并享受其中的乐趣!在这种情况下,我们不需要嵌入式
    nrepl服务器
    。要停止http服务器,请运行
    (http/stop destroy)
    。对其进行了描述

我对苹果酒不太确定,但你看到了吗:@Ballpark哦,我真的找到了这个!我忘了这就是这个问题。“今晚我会自己回答的。”西纳雷德说,“我想看看。”answer@SeanAllred在这里发布这个答案会很好,这样其他最终有类似问题的人就可以解决它。@foki唉——我似乎总是在这里做出承诺,而当涉及到自我回答时,我不会遵守这些承诺。我添加了一个待办事项,但列表很长。同时,请看。非常感谢您写下这篇文章:-)