1

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

4

1 回答 1

2

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

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

如果您使用 Maven,您可以使用 maven-jetty-plugin 在您更改其源文件时自动重新加载您的 web 应用程序。有关更多信息,请参阅此帖子

另一种选择是不断尝试重新加载您的 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,但以上内容可以帮助您解决问题。

于 2010-10-01T11:50:12.280 回答