在 Erlang 中不使用 OTP 发行版的热代码重新加载(八十二新闻)

主要观点: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 pullserver-reload操作。
阅读 8
0 条评论