You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang从节点如何加载sys.config配置?

Erlang从节点如何加载sys.config配置?

嗨,我来帮你梳理下这个问题的原因和解决办法~

你遇到的问题核心在于peer:start传递VM参数的方式不对,以及可能存在的相对路径问题,导致从节点没能正确加载sys.config。

问题原因分析

  • VM参数传递格式错误:你现在把所有启动参数拼接成了一个字符串传给peer:start的args选项,但peer:start的args期望的是一个字符串列表,每个元素对应一个独立的Erlang VM命令行参数。把所有参数放一个字符串里,VM无法正确解析-config这类选项,自然加载不了配置文件。
  • 相对路径的不确定性:你用了../../config/sys.config这种相对路径,但从节点的工作目录可能和主节点不一样,导致找不到配置文件。

具体解决步骤

1. 拆分VM参数为列表

把原来拼接的字符串拆分成单独的参数列表,让VM能正确识别每个选项:

spawn_node(NodeName) ->
    Cookie = atom_to_list(erlang:get_cookie()),
    % 获取sys.config的绝对路径,避免相对路径问题
    ConfigPath = filelib:ensure_absolute("../../config/sys.config"),
    % 拆分每个VM参数为单独的列表元素
    VmArgs = [
        "-loader", "inet",
        "-hosts", "127.0.0.1",
        "-config", ConfigPath,
        "-setcookie", Cookie
    ],
    {ok, _Pid, Node} = start_node(NodeName, VmArgs),
    pong = net_adm:ping(Node),
    ct:log("Slave started as ~p~n", [Node]),
    ok = rpc:block_call(Node, code, add_paths, [code:get_path()]),
    {ok, _} = rpc:block_call(Node, application, ensure_all_started, [toy_kv]),
    % 验证配置是否加载
    ConfigCheck = rpc:block_call(Node, application, get_env, [toy_kv]),
    ct:log("Loaded config for toy_kv: ~p~n", [ConfigCheck]),
    Node.

start_node(NodeName, VmArgs) ->
    peer:start(#{
        name => node_name(NodeName),
        host => "127.0.0.1",
        args => VmArgs
    }).

2. 用绝对路径指定配置文件

使用filelib:ensure_absolute/1把相对路径转换成绝对路径,这样不管从节点的工作目录是什么,都能准确找到sys.config文件。

3. 验证配置加载情况

可以在启动从节点后,通过rpc:block_call(Node, application, get_env, [toy_kv])或者rpc:block_call(Node, config, get_config, [])来确认配置是否成功加载。

额外注意点

  • 确保sys.config的格式是正确的Erlang术语,比如:
    [{toy_kv, [{mode, distributed}, {other_key, other_val}]}].
    
  • 只要VM启动时正确加载了sys.config,应用启动时会自动读取对应的配置项,不需要额外手动设置。

这样调整后,从节点应该就能正确加载sys.config里的配置,application:get_env/2也能返回预期的值了~

备注:内容来源于stack exchange,提问作者Hasitha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:54:36