我有Erlang应用程序运行在R13版本的Erlang VM上。我想在不停止应用程序的情况下将VM升级到R14。我如何在应用程序之间进行实时迁移不同版本的Erlang VM?
您需要两件事:
a)很多很多的计划。
b)在多个节点上运行的应用程序。
通常的技巧是关闭部分节点集群并将其升级到新版本。它应该能够与旧节点通信。当新版本的Erlang接管后,再对旧的节点进行碰撞。
Erlang不提供这种免费的升级。但它确实使它不那么痛苦了。
简而言之,你不能。
这是因为为新版本的BEAM模拟器(Erlang VM)编译的应用程序不能在旧版本的模拟器上正常运行。
或者更详细的:
升级应用程序而不停止它只能使用释放处理程序来完成。但是发布处理程序只能升级在VM中运行的应用程序,而不能升级VM本身。您仍然可以准备一个relup
文件,但是当systools:make_relup/3注意到新版本使用不同版本的BEAM模拟器时,它将添加指令restart_new_emulator (Low-Level)
以在升级期间重新启动节点(参见我前面提到的页面上对restart_new_emulator
的描述)。