【问题标题】:load-views when running multiple noir servers运行多个黑色服务器时的加载视图
【发布时间】:2012-06-06 00:22:05
【问题描述】:

我正在尝试使用 noir 来启动三台服务器(每台服务器处理应用程序的不同方面)。我正在尝试这样做,以便在开发时可以在一个应用程序中运行所有三台服务器,并将项目轻松解耦为三个不同的应用程序进行部署。

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

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

【问题讨论】:

    标签: clojure compojure ring noir


    【解决方案1】:

    我通过清除 noir.core/noir-routesnoir.core/route-funcsnoir.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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      相关资源
      最近更新 更多