Erlang 如何在实时代码升级中更新监控树?

Erlang 如何在实时代码升级中更新监控树?,erlang,elixir,otp,Erlang,Elixir,Otp,我在实时代码升级中遇到的一个问题是,监督树的结构发生了变化。监督类型为MyApp.Worker1的流程和类型为MyApp.Worker2的流程的主管现在还需要监督类型为MyApp.Worker3的第三个流程 更新MySupervisor.init/1将正确启动监控程序,但不会更改当前监控程序的结构,前提是该监控程序从未崩溃 显然,我可以重新启动节点,但这违背了实时代码升级的目的。我可以my_app remote_consolein并手动执行Supervisor。如果我注册了Supervisor,

我在实时代码升级中遇到的一个问题是,监督树的结构发生了变化。监督类型为
MyApp.Worker1
的流程和类型为
MyApp.Worker2
的流程的主管现在还需要监督类型为
MyApp.Worker3
的第三个流程

更新
MySupervisor.init/1
将正确启动监控程序,但不会更改当前监控程序的结构,前提是该监控程序从未崩溃

显然,我可以重新启动节点,但这违背了实时代码升级的目的。我可以
my_app remote_console
in并手动执行
Supervisor。如果我注册了Supervisor,则启动\u child/2
,但如果在许多节点上广泛部署,手动干预是不可行的


在实时代码升级期间更新监控树(包括添加和删除)的最佳实践是什么?理想情况下,这将考虑Erlang和Elixir模块之间的任何差异(也称为跨语言兼容)

这可能很有用:.
rtfm
始终是一个有效的答案。把它放在一个答案里,我会接受的:)如果你想弄明白的话,这真的只是一个指针。让我们看看是否有人给出了更简单的解释,特别是在Elixir和exrm的上下文中。