我正在尝试使用noir启动三个服务器(每个服务器处理应用程序的不同方面)。我正在尝试这样做,以便我可以在一个应用程序中运行所有三个服务器,同时开发并轻松地将项目拆分为三个不同的应用程序进行部署。
使用noir.server/start
和noir.server/stop
来运行我需要的码头服务器是没有问题的。
我想弄清楚的是用某种方法调用load-views
(或类似的东西),为每个服务器设置不同的设置视图,以便正确的defpage
处理URI冲突。
答案 0 :(得分:1)
我找到了一个可以清除noir.core/noir-routes
,noir.core/route-funcs
,noir.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)))