2017-04-22 9 views
2

그래서 HTTP 서버를 시작하는 기본 메소드가있는 간단한 webapp가 있습니다. 달성하고자하는 dev 설치 프로그램은 기본적으로 lein auto를 사용하는 것과 비슷하지만 서버를 중지하고 시작하여 파일 변경시 자동으로 네임 스페이스를 다시로드하려고합니다. 이것은 간단하고 쉬운 것이어야하지만, 지금까지는 이것을 달성하기위한 어떤 플러그인이나 다른 방법을 찾지 못했습니다.Clojure는 Component와 같은 라이브러리를 사용하지 않고 워크 플로를 다시로드 했습니까?

답변

3

내가 찾고있는 것은 tools.namespacewrap-reload의 조합입니다.

(ns your-project.core 
    (:require [clojure.tools.namespace.repl :as tn] 
      [org.httpkit.server :as http] 
      [ring.middleware.reload :refer [wrap-reload]] 
      [compojure.core :refer [defroutes GET]] 

(defroutes create-app [] 
    (GET "/" [] (fn [req] "hello world") 

(defonce server (atom nil)) 

(defn start [] 
    (let [app (create-app)] 
    (reset! server (http/run-server (wrap-reload app) {:port 3000})) 
    (println (str "Listening on port " 3000)))) 

(defn stop [] 
    (when @server 
    (@server :timeout 100) 
    (reset! server nil))) 

(defn restart [] 
    (stop) 
    (tn/refresh :after 'your-project.core/start)) 
+0

그래,이 정확히 내가 무엇을 찾고 다음과 같습니다

는 여기에 내가 무엇을 최대 온입니다. 감사합니다 – user1622727

+1

dev 모드에서만 다시로드해야합니까? – danfromisrael

+0

네가 맞다. 최근 프로젝트에서 이걸 좀 더 확장 했어. 완벽하지는 않지만, prod와 dev를 구별하려고한다. https://github.com/swlkr/coast/blob/master/src/ coast/server.clj – swlkr