主要观点:Erlang 支持在运行系统中更改代码,但细节较繁琐,给出了一个简单 TCP 服务的示例。
关键信息:
- 有一个单模块程序在 OTP
application
上下文外运行,code_change/0
函数在模块加载新版本后被调用,向“全局”参与者发送消息并进行“MFA”自我调用以升级代码基。 - 程序通过
daemontools
运行,run
脚本用于启动,server-reload
脚本用于热加载代码,运行server-reload
可编译并加载源代码到运行的服务器。 - 还使用了 git
post-receive
钩子在推送代码时自动重新编译和加载。
重要细节: - 未使用
-on_load()
指令,因为要使用多个节点且不知如何使其与单节点的 shell repl 配合良好。 server-reload
脚本中通过net_kernel:connect_node
连接到主节点并执行代码清理、加载和code_change
操作,最后init:stop
停止。git post-receive
钩子中设置环境变量并执行git pull
和server-reload
操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。