2

noir を使用して 3 つのサーバーを起動する実験を行っています (それぞれがアプリケーションの異なる側面を処理します)。開発中に 1 つのアプリケーション内で 3 つのサーバーすべてを実行し、展開のためにプロジェクトを 3 つの異なるアプリケーションに簡単に分離できるように、これを実行しようとしています。

必要な jetty サーバーを使用noir.server/startして実行することは問題ありません。noir.server/stop

私が理解しようとしているのはload-views、URI の競合が正しいdefpage.

4

1 に答える 1

1

noir.core/noir-routesnoir.core/route-funcsnoir.core/pre-routes、および をクリアすることで機能する解決策を見つけましたnoir.core/post-routes。以下に、3 つのサーバーをすべて独自のビューで起動する名前空間の例を示します。

(ns my-three.server
  (:require
   [noir.core :as noir] 
   [noir.server :as server]))

(def ^:dynamic *servers* (atom {}))

(defn clear-routes []
  (do
    (reset! noir/noir-routes {})
    (reset! noir/route-funcs {})
    (reset! noir/pre-routes (sorted-map))
    (reset! noir/post-routes [])
    nil))

(defn start-server [port mode]
  (if-let [s (@*servers* port)]
    (println "Server already running on port" port)
    (swap! *servers* assoc port (server/start port {:mode mode}))))

(defn stop-server [port]
  (let [s (@*servers* port)]
    (server/stop s)
    (swap! *servers* dissoc port)))

(defn stop-all []
  (doall (map stop-server (keys @*servers*))))


(defn -main [& m]
  (let [mode (if (nil? (first m)) :prod (first m))]
    (server/load-views "src/my_three/views/web/" )
    (start-server 8080 mode)
    (clear-routes)
    (server/load-views "src/my_three/views/mobile_downstream/")
    (start-server 8081 mode)
    (clear-routes)
    (server/load-views "src/my_three/views/mobile_upstream/")
    (start-server 8082 mode)))
于 2012-06-02T16:37:30.753 に答える