ざる魂

真似ぶ魂、学ぶの本質。知られざる我が魂

Misakiにnrepl-serverを埋め込む

misakiのプラグインを開発していて、nreplから接続したかったのでその方法。 下記のように修正。

mikio@gnudam:~/dev/misaki$ git diff HEAD^
diff --git a/.gitignore b/.gitignore
index fb7a616..777bdaa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,8 @@
 /.lein-failures
 /checkouts
 /.lein-deps-sum
+misaki/src/misaki/
+/.nrepl-port
 /blog
 /test/public
 /samples/*/public/201*
diff --git a/project.clj b/project.clj
index 82e93ff..8b0aa33 100644
--- a/project.clj
+++ b/project.clj
@@ -13,7 +13,9 @@
                  [cuma "0.0.4"]
                  [clj-gntp "0.0.1"]
                  ; cljs compiler
-                 [org.clojure/clojurescript "0.0-1586"]]
+                 [org.clojure/clojurescript "0.0-1586"]
+                 [org.clojure/tools.nrepl "0.2.3"]
+                 ]
 
   :plugins [[codox "0.6.4"]
             [lein-cloverage "1.0.2"]
diff --git a/samples/blog/_config.clj b/samples/blog/_config.clj
index e36a47f..0e74f47 100644
--- a/samples/blog/_config.clj
+++ b/samples/blog/_config.clj
@@ -17,6 +17,10 @@
  ;;   default value: 8080
  :port 8080
 
+ ;; embeded repl-server port
+ ;;   default value: 42042
+ :repl-port 42042
+
  ;; site language
  ;;   default value: "en"
  :lang "en"
diff --git a/src/misaki/config.clj b/src/misaki/config.clj
index 735874d..8865cf6 100644
--- a/src/misaki/config.clj
+++ b/src/misaki/config.clj
@@ -13,6 +13,7 @@
 ;; ## Default Value
 
 (def PORT     "Default dev server port." 8080)
+(def REPL-PORT "Default dev nrepl server port." 42042)
 (def LANGUAGE "Default language."        "en")
 (def COMPILER "Default compiler."        "default")
 (def POST_FILENAME_REGEXP
@@ -102,6 +103,7 @@
                         (path template-dir post-dir))
       :post-sort-type (:post-sort-type config :date-desc)
       :port           (:port config PORT)
+      :repl-port           (:repl-port config REPL-PORT)
       :lang           (:lang config LANGUAGE)
       :site           (:site config {})
       :index-name     (:index-name config "")
diff --git a/src/misaki/server.clj b/src/misaki/server.clj
index d0fee30..03a593b 100644
--- a/src/misaki/server.clj
+++ b/src/misaki/server.clj
@@ -13,7 +13,9 @@
     [watchtower.core      :refer :all]
     [compojure.core       :refer [routes]]
     [compojure.route      :refer [files]]
-    [ring.adapter.jetty   :refer [run-jetty]]))
+    [ring.adapter.jetty   :refer [run-jetty]]
+    [clojure.tools.nrepl.server :refer [start-server stop-server]]
+    ))
 
 ; =elapsing
 (defmacro elapsing
@@ -87,18 +89,21 @@
 (defn -main [& [dir :as args]]
   (binding [*base-dir* (normalize-path dir)]
     (with-config
-      ; compile all templates at first
-      (do-all-compile)
-
-      ; compile all only if '--compile' option is specified
-      (when-not (contains? (set args) "--compile")
-        (start-watcher (:template-dir *config*))
-        (println " * starting server: "
-                 (cyan (str "http://localhost:"
-                            (:port *config*)
-                            (:url-base *config*))))
-        (run-jetty
-          (routes (files (:url-base *config*)
-                         {:root (:public-dir *config*)}))
-          {:port (:port *config*)})))))
+      (let [repl-port (:repl-port *config*)
+            repl-server (start-server :port repl-port)]
+         ;; compile all templates at first
+         (do-all-compile)
+
+         ;; compile all only if '--compile' option is specified
+         (when-not (contains? (set args) "--compile")
+           (start-watcher (:template-dir *config*))
+           (println " * starting server: "
+                    (cyan (str "http://localhost:"
+                               (:port *config*)
+                               (:url-base *config*))))
+           (println " * starting nrepl server on port " (cyan repl-port))
+           (run-jetty
+            (routes (files (:url-base *config*)
+                           {:root (:public-dir *config*)}))
+            {:port (:port *config*)}))))))

下記で、修正したmisakiにローカルのjarが置き換わる。

$ cd ~/dev/misaki/
$ lein install

misaki本家が更新されたときは、

$ git co master
$ git fetch upsutream
$ git merge upstream/master
$ lein install

こんな感じで。

もし修正版のmisakiを使用したくなくなったら リポジトリを手動で削除すれば良い(正式なやりかたがあるかもしれんが)。

$ rm -rf ~/.m2/repository/misaki/misaki/0.2.6.2-beta
$ lein deps