无法从偏航runmod

时间:2015-10-29 23:57:01

标签: erlang yaws

我在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>

我做错了什么?

2 个答案:

答案 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).