ring-reload-modifiedで自動リロード


weavejester/ring-reload-modified – GitHub

WEB開発を行っていると編集した内容をすぐに確認したいですよね。以前までは、編集してはサーバプログラムを一度停止して再度起動するということをやっており、毎回手動で再起動処理を行うのが非常に面倒で、さらには再起動を忘れ、動作確認時に「あれ?」みたいな事がたまにあったので、解決策を探しているとRingのMiddlewareとして上記がありました。

これは、指定したソースディレクトリのClojureファイルが修正されたらリロードしてくれるというものです。設定は簡単で、こんな感じにします。

ただ、一つ難点があり、Fleetのテンプレートファイルのみを編集した場合には変更を検出してくれず、正常に変更を表示できません。まだ、ring-reload-modifiedのソースを見れていないので、もしかすると簡単に対応できるかもしれません。

とりあえず、設定方法は下記のようになります。

広告

設定方法

project.cljの:dependenciesに[ring-reload-modified "0.1.1"]を追加後、下記の設定を行えば自動リロードするようになります。

変更前

(ns compojuretest.core
  (:use compojure.core
        compojure.response
        ring.adapter.jetty
        [ring.util.response :only (response content-type)]
        fleet)
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))
 
;; ... 省略 ...
 
;; =============================================
;; Routes
;; =============================================
(defroutes app
  (GET "/" [] (tpl/index {})))
 
;; =============================================
;; Run Server
;; =============================================
(defn -main []
  (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))]
    (run-jetty (handler/site app) {:port port})))

変更後

(ns compojuretest.core
  (:use compojure.core
        compojure.response
        ring.adapter.jetty
+       ring.middleware.reload-modified
        [ring.util.response :only (response content-type)]
        fleet)
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))
 
;; ... 省略 ...
 
;; =============================================
;; Routes
;; =============================================
(defroutes app
  (GET "/" [] (tpl/index {})))
 
;; =============================================
;; Run Server
;; =============================================
+ ;; AutoReload Configuration
+ (def app (handler/site app))
+ (def handlerApp 
+     (wrap-reload-modified #'app ["src"]))
 
(defn -main []
  (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))]
-     (run-jetty (handler/site app) {:port port})))
+     (run-jetty handlerApp {:port port})))

関連記事