使用 leiningen/ring/compojure/luminus 的网络连接 REPL

3

我正在使用luminus web框架运行服务器,该框架使用ring/compojure,并且我希望能够通过clojure repl连接到我的代码。 我了解到有一个nrepl服务器,即网络repl,可以通过以下方式连接:`lein repl :connect user@host:port(或某些其他协议,我尝试了几种方式)。

当您使用`lein new luminus [project-name](实际上我添加了必要的browser-repl部分以连接clojurescript repl)`自动生成luminus项目时,将创建以下来自`repl.clj`的代码。

(ns sophia-site.repl
  (:require [cemerick.piggieback :as pig]
            [weasel.repl.websocket])
  (:use sophia-site.handler
        ring.server.standalone
        [ring.middleware file-info file]))

(defn browser-repl []
  (pig/cljs-repl :repl-env 
                 (weasel.repl.websocket/repl-env :ip "localhost" :port 9001)))

(defonce server (atom nil))

(defn get-handler []
  ;; #'app expands to (var app) so that when we reload our code,
  ;; the server is forced to re-resolve the symbol in the var
  ;; rather than having its own copy. When the root binding
  ;; changes, the server picks it up without having to restart.
  (-> #'app
      ; Makes static assets in $PROJECT_DIR/resources/public/ available.
      (wrap-file "resources")
      ; Content-Type, Content-Length, and Last Modified headers for files in body
      (wrap-file-info)))

(defn start-server
  "used for starting the server in development mode from REPL"
  [& [port]]
  (let [port (if port (Integer/parseInt port) 8080)]
    (reset! server
            (serve (get-handler)
                   {:port port
                    :init init
                    :auto-reload? true
                    :destroy destroy
                    :join? false}))
    (println (str "You can view the site at http://some-ip:" port))))

(defn stop-server []
  (.stop @server)
  (reset! server nil))

我尝试使用lein repl :connect ...命令连接失败了。

  1. 我该如何将Clojure repl附加到服务器上的代码?

感谢您的所有帮助。

1个回答

4
在您的项目根目录下运行lein repl,连接后您可以在repl提示符中输入(start-server)。服务器和浏览器选项卡将被启动,并且您可以使用从中调用(start-server)的repl提示符与正在运行的应用程序进行交互。
为了防止浏览器选项卡启动,您需要在repl.clj中传递给serve的选项映射中添加:open-browser? false
(serve (get-handler)
       {:port port
        :init init
        :auto-reload? true
        :destroy destroy
        :open-browser? false
        :join? false})

你能给一个简单的工作示例,展示连接所需的客户端和服务器命令吗? - CodeKingPlusPlus
我该如何阻止浏览器标签页的打开? - CodeKingPlusPlus
我已经修改了答案,包括防止浏览器标签页被启动的步骤。 - Symfrog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接