2

我正在尝试使用 noir 来启动三台服务器(每台服务器处理应用程序的不同方面)。我正在尝试这样做,以便我可以在一个应用程序中运行所有三台服务器,同时开发并轻松地将项目解耦为三个不同的应用程序进行部署。

使用noir.server/startnoir.server/stop运行我需要的码头服务器是没有问题的。

我想弄清楚的是某种方式来调用load-views(或类似的东西),为每个服务器设置不同的视图,以便 URI 冲突由正确的defpage.

4

1 回答 1

1

我通过清除noir.core/noir-routesnoir.core/route-funcsnoir.core/pre-routes和找到了一个解决方案noir.core/post-routes。我在下面有一个命名空间示例,该命名空间启动三个服务器,它们都有自己的视图。

(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 回答