load-views при запуске нескольких серверов noir
Я экспериментирую с использованием noir для запуска трех серверов (каждый для обработки различных аспектов приложения). Я пытаюсь сделать это так, чтобы я мог запустить все три сервера в одном приложении при разработке и легко разделить проект на три разных приложения для развертывания.
Это не проблема для использования noir.server/start
а также noir.server/stop
для запуска серверов причала мне нужно.
То, что я пытаюсь выяснить, это какой-то способ позвонить load-views
(или что-то в этом роде) с различными наборами представлений для каждого сервера, чтобы конфликты URI обрабатывались правильным defpage
,
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)))