我在yaws.conf中定义了一个yaws runmod:
runmod = sg_app
模块包含导出的函数:
start()->
io:format("~p start~n", [ sg_sup:start_link() ]).
当我开始偏航时,我看到了对runmod的调用:
= INFO REPORT ==== 2015年10月29日:: 16:46:51 === sync call sg_app:start
{ok,< 0.61.0>}开始
但主管不存在:
1> whereis(sg_sup).
undefined
如果我调用runmod:手动启动,主管就会挂起。
2> sg_app:start().
{ok,<0.73.0>} start
ok
3> whereis(sg_sup).
<0.73.0>
我做错了什么?
答案 0 :(得分:2)
您的runmod的start/0
函数正在使用start_link/0
启动主管,这意味着它已链接到父进程。当该进程终止时,由于链接,它会使你的runmod进程失效。 runmod
功能不适用于启动监督树。
您可以考虑使用yapp
,它允许您的代码作为常规Erlang应用程序在与Yaws相同的Erlang节点中运行,并注册为让Yaws向其发送请求。
答案 1 :(得分:1)
另一个选择是使用单独生成的无限过程启动您的应用程序:
start()->
spawn(fun () ->
application:start(my_app, permanent),
receive after infinity -> ok end
end).