Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 运行多个noir服务器时加载视图_Clojure_Compojure_Ring_Noir - Fatal编程技术网

Clojure 运行多个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启动三个服务器(每个服务器处理应用程序的不同方面)。我正在尝试这样做,以便在开发时可以在一个应用程序中运行所有三个服务器,并轻松地将项目解耦到三个不同的应用程序中进行部署

使用
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)))