подключенный к сети REPL с leiningen/ring/compojure/luminus

Я использую сервер с веб-платформой luminus, которая использует кольцо/compojure, и я хочу иметь возможность подключаться к моему коду с помощью clojure repl. Я понимаю, что есть сервер nrepl, который означает network repl, и что вы можете подключиться к нему через: `lein repl :connect user@host:port (или какой-то другой протокол, я пробовал кое-что).

Следующий код из repl.clj создается, когда вы автоматически генерируете проект luminus с помощью `lein new luminus [имя проекта] (на самом деле я добавил часть browser-repl, необходимую для присоединения clojurescript repl).

(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 к моему коду на сервере?

Спасибо за помощь


person CodeKingPlusPlus    schedule 16.01.2015    source источник


Ответы (1)


В корне вашего проекта вы должны запустить lein repl, после подключения вы можете ввести (start-server) в приглашении repl.

Ваш сервер и вкладка браузера будут запущены, а приглашение repl, которое вы вызвали (start-server), можно использовать для взаимодействия с запущенным приложением.

Чтобы предотвратить запуск вкладки браузера, вам нужно добавить :open-browser? false в карту параметров, переданную serve в repl.clj:

(serve (get-handler)
       {:port port
        :init init
        :auto-reload? true
        :destroy destroy
        :open-browser? false
        :join? false})
person Symfrog    schedule 16.01.2015
comment
Можете ли вы привести крошечный рабочий пример, показывающий команды клиента и сервера, необходимые для подключения? - person CodeKingPlusPlus; 17.01.2015
comment
Как запретить открывать вкладку браузера? - person CodeKingPlusPlus; 17.01.2015
comment
Я изменил ответ, включив в него шаги, предотвращающие запуск вкладки браузера. - person Symfrog; 17.01.2015