2013-02-20 10 views
5

ClojureでRing/Jettyを使用すると、コードを変更するときにJVM全体をリロードする必要があります。Ring/Jettyの自動コードリロード

Jettyを自分のコードの変更と非同期にする方法はありますか?ブラウザウィンドウを更新してただちに変更を加えるだけです。

具体的には、私はHiccup for HTML Parsingを使用していますが、主にレイアウトを変更しています。

レイアウトの変更が自動的にコンパイルされ、リフレッシュ時にブラウザで利用できるようになると、時間が大幅に節約されます。

誰でも情報はありますか?解決策はありますか?

答えて

8

lein-ring、具体的には:auto-reload?:auto-refresh?のオプションを確認してください。

7

リングの自動リロード機能の代わりに、emacs + nreplや反時計回りなどのrepl対応の開発システムを使用している場合(そうでない場合は、それを見てみる必要があります) )を使用すると、特定の定義やファイルをエディタから実行中のシステムに直接再評価することができます。 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"]])