REPL connecté au réseau avec leiningen / ring / compojure / luminus

Je gère un serveur avec le framework web luminus qui utilise ring / compojure et je veux pouvoir me connecter à mon code avec un clojure repl. Je comprends qu’il y a un serveur nrepl qui signifie network repl et que vous pouvez vous connecter via: `lein repl: connect user @ host: port (ou un protocole différent, j’ai essayé quelques petites choses).

Le code suivant de repl.clj est créé lorsque vous générez automatiquement un projet Luminus avec `lein new luminus [nom-projet] (en fait, j’ai ajouté le composant repli de navigateur nécessaire pour joindre un 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)) 

J’ai échoué avec lein repl :connect ...

  1. Que puis-je faire pour attacher une réplique à mon code sur un serveur?

Merci pour votre aide

Dans votre racine de projet, vous devez lancer lein repl , une fois connecté, vous pouvez entrer (start-server) à l’invite repl.

Votre serveur et un onglet de navigateur seront lancés et l’invite de remplacement que vous avez appelée (start-server ) peut être utilisée pour interagir avec l’application en cours d’exécution.

Pour empêcher le lancement d’un onglet de navigateur, vous devez append :open-browser? false :open-browser? false à la carte d’options passée pour serve dans repl.clj:

 (serve (get-handler) {:port port :init init :auto-reload? true :destroy destroy :open-browser? false :join? false})