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)))
Другие вопросы по тегам