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