代码之家  ›  专栏  ›  技术社区  ›  yazz.com

如何让Clojure webapp自动重新部署?

  •  1
  • yazz.com  · 技术社区  · 14 年前

    我正在Clojure和Vaadin开发一个Web应用程序,但是我不能让应用程序自动部署,所以我只需在浏览器上按“刷新”。有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   cemerick    14 年前

    理想情况下,您使用的是一个repl服务器,它允许您随意将新的clojure代码加载到应用程序中。在这种情况下,只需将工作流更改为:

    1. 注意问题
    2. 转到Clojure编辑器
    3. 将新代码加载到正在运行的应用程序中
    4. 转到浏览器,单击刷新。

    如果您使用的是maven,那么您可以使用maven jetty插件在更改webapp的源文件时自动重新加载它。见 this post 更多信息。

    另一种选择是继续尝试重新加载Clojure代码。可能是这样的:

    (defn reload
      ([] (reload #"."))
      ([ns-pattern]
        (doseq [ns (all-ns)
                :let [ns (.name ns)]
                :when (re-seq ns-pattern (str ns))]
          (require ns :reload))))
    

    在启动webapp的代码中,或者在servlet init等主代码中,添加如下内容:

    (future (loop []
              (Thread/sleep 5000)
              (reload) ;; optionally specify a regex to match only your app's namespaces here
              (recur)))
    

    绝对不是你想在生产中使用的东西。我希望在每种情况下都使用适当的远程回复,但是上面的内容会帮助您度过难关。