将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
相关产品推荐
相关产品推荐

