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

时间:2010-10-01 08:24:24

标签: clojure vaadin

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

1 个答案:

答案 0 :(得分:2)

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

  1. 通知问题
  2. 去Clojure编辑
  3. 将新代码加载到正在运行的应用程序中
  4. 转到浏览器,点击刷新。
  5. 如果您正在使用Maven,则可以在更改源文件时使用maven-jetty-plugin自动重新加载您的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)))
    

    绝对不是您想要在制作中使用的东西。我更喜欢在每种情况下使用适当的远程REPL,但上面的内容会让你接受。