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

将Yaws嵌入Rebar3做服务端时的embedded_start_conf配置异常

嵌入启动Yaws时函数子句不匹配问题

我尝试在Supervisor中通过yaws_api:embedded_start_conf/1,2,3,4启动Yaws,仅用它通过Erlang模块提供动态内容(比如API响应或动态页面),不需要从目录加载静态文件,但调用配置函数时抛出了异常。


Supervisor代码

%%%-------------------------------------------------------------------
%% @doc workchat 顶级监督者
%% @end
%%%-------------------------------------------------------------------

-module(workchat_sup).

-behaviour(supervisor).

-export([start_link/0, init/1]).

-include_lib("yaws/include/yaws_api.hrl").
-include_lib("yaws/include/yaws.hrl").

-define(SERVER, ?MODULE).

start_link() ->
    supervisor:start_link({local, ?SERVER}, ?MODULE, []).

init([]) ->
    ID = "Workchat Backend",
    ServerConf = [
        {listen, {127, 0, 0, 1}},
        {docroot, none},
        {port, 8080}
        % {dynamic_handlers, [{"/api", workchat_yaws_handler}]},
        % {max_connections, 1024},
        % {ebin_dir, "/mnt/c/Users/PankajMali/Project/workchat/_build/default/lib/workchat/ebin"},
        % {logdir, "/mnt/c/Users/PankajMali/Project/workchat/yawslogs"},
        % {keepalive_timeout, 60000}
    ],

    GlobalConf =
        [
            {id, ID},
            {ebin_dir, "/mnt/c/Users/PankajMali/Project/workchat/_build/default/lib/workchat/ebin"},
            {logdir, "/mnt/c/Users/PankajMali/Project/workchat/yawslogs"},
            {dynamic_handlers, [{"/api", workchat_yaws_handler}]}
        ],
        %% 显式启动Yaws
    case
        yaws_api:embedded_start_conf(none, ServerConf, GlobalConf, ID
        )
    of
        {ok, GlobalConf, ServerConf, Child} ->
            io:format("Yaws启动成功,GlobalConf: ~p,ServerConf: ~p~n", [
                GlobalConf, ServerConf
            ]),
            io:format("Yaws配置设置完成~n"),

            %% 定义workchat_app子进程规范
            WorkchatAppChild = #{ 
                id => workchat_app,
                start => {workchat_app, start_link, []},
                restart => permanent,
                shutdown => 5000,
                type => worker,
                modules => [workchat_app]
            },

            %% 合并Yaws子进程规范和workchat_app子进程规范
            ChildSpecs = Child ++ [WorkchatAppChild],
            io:format("子进程规范: ~p~n", [ChildSpecs]),

            {ok, {{one_for_one, 5, 10}, ChildSpecs}};
        Reason ->
            io:format("启动Yaws失败: ~p~n", [Reason]),
            {stop, Reason}
    end.

错误信息

crasher:
    initial call: supervisor:workchat_sup/1
    pid: <0.535.0>
    registered_name: []
    exception error: 没有匹配的函数子句
                     yaws_api:embedded_start_conf(none,
                                                  [{listen,{127,0,0,1}},
                                                   {docroot,none},
                                                   {port,8080}],
                                                  [{id,"Workchat Backend"},
                                                   {ebin_dir,
                                                    "/mnt/c/Users/PankajMali/Project/workchat/_build/default/lib/workchat/ebin"},
                                                   {logdir,
                                                    "/mnt/c/Users/PankajMali/Project/workchat/yawslogs"},
                                                   {dynamic_handlers,
                                                    [{"/api",
                                                      workchat_yaws_handler}]}],
                                                  "Workchat Backend") (/mnt/c/Users/PankajMali/Project/workchat/_build/default/lib/yaws/src/yaws_api.erl, 第2732行)
      in function  workchat_sup:init/1 (/mnt/c/Users/PankajMali/Project/workchat/src/workchat_sup.erl, 第42行)     
      in call from supervisor:init/1 (supervisor.erl, 第330行)
      in call from gen_server:init_it/2 (gen_server.erl, 第851行)
      in call from gen_server:init_it/6 (gen_server.erl, 第814行)
    ancestors: [<0.528.0>]
    message_queue_len: 1
    messages: [{'EXIT',<0.528.0>,normal}]
    links: []
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 376
    stack_size: 28
    reductions: 184
  neighbours:

内容的提问来源于stack exchange,提问作者pankaj mali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:05:01