2012-05-31 18 views
2

我正在与使用黑色来启动三个服务器实验时(每个来处理应用程序的不同方面)。我试图做到这一点,这样我可以在一个应用程序中运行的所有三个服务器而开发和容易分离项目将部署三个不同的应用程序。负载的视图运行多个比诺服务器

它是使用noir.server/startnoir.server/stop运行我需要的码头服务器没有问题。

我试图找出一些方法为每个服务器一组不同的视图来调用load-views(或类似的东西),这样URI冲突由正确defpage处理。

回答

1

我发现一个解决方案,通过清除noir.core/noir-routes,noir.core/route-funcs,noir.core/pre-routesnoir.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)))