簡體   English   中英

如何將 CIDER 的調試器附加到 Luminus Web 應用程序?

[英]How can I attach CIDER's debugger to a Luminus web application?

我有一個 Luminus 項目,服務器在localhost:7000上運行。 我使用cider-connect將自己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

我想調試至少需要其中之一; 嘗試檢測函數產量

clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: \
    No reader function for tag dbg

我可以使用“正常”的 Clojure 項目進行調試。 我已經嘗試將通常在~/.lein/profiles.clj的樣板添加到項目的project.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 server作為在運行時連接到它的機會的應用程序),您應該做兩件事:

  • 將所有需要的中間件作為:handlerclojure.tools.nrepl.server/start-server 為此,您應該在lein可以找到它們的地方列出包含中間件的庫(例如在project.clj :dependencies )。

  • 運行啟動嵌入式nrepl server應用程序,並使用cider-connectCider連接到它。

除了cider-nrepl我想使用Clojure refactor所需的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})))

然后,您可以使用lein run運行您的Luminus應用程序,並使用cider-connectMx cider-connectCc Mc )將其與Cider cider-connect ,默認情況下,連接的 url 為localhost:7000


據推測, Luminus嵌入式nrepl server旨在在應用程序已經部署在某處並且您想要進行一些實時調試時使用。 對於本地開發,有標准方法:

  • 在項目根目錄中運行lein repl Cider將使用lein repl :headless完成這項工作lein repl :headlesscider-jack-in ( Cc Mj ) 上lein repl :headless
  • 它應該在yourapp.core命名空間中啟動repl ,您可以在其中運行(http/start {:port 3000 :init init :handler app})並享受! 在這種情況下,我們不需要嵌入式nrepl server 停止 http 服務器運行(http/stop destroy) 它是在此處描述的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM