Sea*_*red 7 debugging clojure cider luminus
我有一个运行服务器的Luminus项目localhost:7000
.我cider-connect
用来依附于这个repl,但是我遇到了以下墙:
; CIDER 0.10.0snapshot (package: 20150820.852) \
(Java 1.7.0_51, Clojure 1.7.0, nREPL 0.2.10)
WARNING: The following required nREPL ops are not supported:
apropos classpath complete eldoc format-code format-edn info inspect-pop \
inspect-push inspect-refresh macroexpand ns-list ns-vars ns-path refresh \
resource stacktrace toggle-trace-var toggle-trace-ns undef
Please, install (or update) cider-nrepl 0.10.0-SNAPSHOT and restart CIDER
Run Code Online (Sandbox Code Playgroud)
我想至少有一个是调试所必需的; 试图检测功能产量
clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: \
No reader function for tag dbg
Run Code Online (Sandbox Code Playgroud)
我可以使用'普通'Clojure项目进行调试.我已经尝试添加通常进入~/.lein/profiles.clj
项目的样板文件project.clj
无效:
:profiles/dev {:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
:plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"]]}
Run Code Online (Sandbox Code Playgroud)
如何将CIDER的调试器附加到此Web应用程序?
为了节省有类似问题的人的时间,我将在这里发布摘要作为答案.感谢来自clojure-emacs/refactor-nrepl
Gitter和Sean Allred的Benedek Fazekas .
要附加Cider
到Luminus
应用程序(可能还有任何其他使用嵌入式nrepl server
作为运行时连接它的机会的应用程序),您应该做两件事:
提供所有所需的中间件:handler
来clojure.tools.nrepl.server/start-server
.要做到这一点,你应该有一些库,其中包含lein
可以找到它们的地方列出的中间件(例如in project.clj
:dependencies
).
运行启动嵌入式nrepl server
并Cider
使用连接到它的应用程序cider-connect
.
在cider-nrepl
我想要使用Clojure重构refactor-nrepl
所需的东西旁边.通过Luminus网站的示例项目,首先可以这样做:
(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})))
Run Code Online (Sandbox Code Playgroud)
然后你可以运行你的Luminus
应用程序,lein run
并Cider
使用cider-connect
(M-x cider-connect
或C-c M-c
)连接它,默认情况下url连接是localhost:7000
.
据推测,嵌入nrepl server
在Luminus
打算当应用程序已经部署的地方要使用你想要做一些现场调试.对于本地开发,有标准方式:
lein repl
在项目根目录中运行.Cider
将用lein repl :headless
on cider-jack-in
(C-c M-j
)完成工作.repl
在yourapp.core
命名空间中启动,你可以运行(http/start {:port 3000 :init init :handler app})
和享受!在这种情况下,我们不需要嵌入式nrepl server
.停止http服务器运行(http/stop destroy)
.这里描述. 归档时间: |
|
查看次数: |
814 次 |
最近记录: |