2013-02-20 3 views
5

Clojure에서 Ring/Jetty를 사용하면 코드를 변경할 때 전체 JVM을 다시로드해야합니다.Ring/Jetty의 자동 코드 다시로드

Jetty를 내 코드의 변경 사항과 비동기로 유지하는 방법이 있습니까? 브라우저 창을 새로 고치고 즉시 변경 사항을 적용 할 수 있습니까?

특히, 나는 HTML 구문 분석에 Hiccup을 사용하고 있으며 주로 레이아웃을 변경하고 있습니다.

레이아웃 변경 사항이 자동으로 컴파일되고 새로 고침 할 때 브라우저에서 사용할 수 있으면 시간이 많이 절약 될 것입니다.

누구에 대한 정보가 있습니까? 어떤 해결책이 있습니까?

답변

8

lein-ring 특히 :auto-reload?:auto-refresh? 옵션을 확인하시기 바랍니다.

7

링의 자동 다시로드 기능 대신 emacs + nrepl 또는 반 시계 방향과 같은 repl-enabled 개발 시스템을 사용하는 경우 (그렇지 않은 경우 차이점을 확인해야합니다. 만들기)를 사용하면 특정 정의 또는 파일을 편집기에서 실행중인 시스템으로 직접 재평가 할 수 있습니다. IMO는 + (자동) 리로드를 저장하는 것보다 훨씬 뛰어난 워크 플로우입니다. 나는 emacs/nrepl.el을 사용하고 자동 재 로딩을 위해 어떤 용도도 사용하지 못했습니다.

+4

+1 - 당신이에 해킹하고있는 FN의 값을 캐시하지 않는 방법으로 핸들러를 작성해야합니다, 당신은 할 수 REPL에서 내장 된 Jetty를 시작하고 서버를 다시 시작하지 않고도 다시 평가할 때 변경 사항이 즉시 표시되는지 확인하십시오. 거의 처음으로 마법과 같은 느낌. :) – Alex

1

lein-ring을 사용하지 않으시겠습니까? 여기

은 샘플 project.clj입니다 :

(defproject tutorial1 "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :repl-options {:port 11111} 
    :plugins [[lein-ring "0.8.8"]] 
    :ring {:handler tutorial1.core/handler 
      :auto-reload? true 
      :auto-refresh? true 
      } 
    :dependencies [[org.clojure/clojure "1.5.1"] 
        [ring/ring-core "1.2.1"] 
        [ring/ring-jetty-adapter "1.2.1"] 
        [ring-refresh "0.1.1"]])