主要观点: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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。