Clojure 运行多个noir服务器时加载视图
我正在尝试使用noir启动三个服务器(每个服务器处理应用程序的不同方面)。我正在尝试这样做,以便在开发时可以在一个应用程序中运行所有三个服务器,并轻松地将项目解耦到三个不同的应用程序中进行部署 使用Clojure 运行多个noir服务器时加载视图,clojure,compojure,ring,noir,Clojure,Compojure,Ring,Noir,我正在尝试使用noir启动三个服务器(每个服务器处理应用程序的不同方面)。我正在尝试这样做,以便在开发时可以在一个应用程序中运行所有三个服务器,并轻松地将项目解耦到三个不同的应用程序中进行部署 使用noir.server/start和noir.server/stop运行我需要的jetty服务器没有问题 我想弄明白的是,如何使用不同的视图集为每台服务器调用加载视图(或类似的东西),以便通过正确的defpage处理URI冲突。我找到了一个解决方案,它通过清除noir.core/noir路由,noir
noir.server/start
和noir.server/stop
运行我需要的jetty服务器没有问题
我想弄明白的是,如何使用不同的视图集为每台服务器调用
加载视图
(或类似的东西),以便通过正确的defpage
处理URI冲突。我找到了一个解决方案,它通过清除noir.core/noir路由
,noir.core/route函数
,来工作,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)))