JVM:是否可以通过远程 Clojure repl hotfix/patch 生产代码?

JVM: Is it possible hotfix/patch production code via remote Clojure repl?

Clojure for Java Programmers Part 1 谈话中,Rich Hickey 提到这是 Clojure 的好处之一:

If you build an application with some access to the ability to load code - either a remote repl connection or some way to do that. Your running production systems will have this capability to have fixes loaded into running programs.

我想知道它在实践中有多容易。假设我知道一个函数中有一个错误,我想 redefine/override 通过远程 repl

在生产中解决它

我没有在生产中使用 JVM 的任何经验,这就是问这个问题的原因。

Is it possible?

是的,我建议观看 The Joys and Perils of Interactive Development - Stuart Sierra 他讲述了 NASA 使用 REPL 在 space 中修补卫星的故事。

Will the overridden version stay active after I exit the repl?

当您重新评估函数时,更改将应用​​到所有地方,例如

(defn add1 [x]
  (+ x 2))

(defn foo [x]
  (add1 x))

(foo 1)

注意 (foo 1) => 3 如果您修复并重新评估 add1 然后 运行 再次 (foo 1) => 2