如何改变Yaws appmods文件?

zie*_*ony 6 erlang yaws

我正在尝试管理Yast appmod.所以:
yaws.conf:

<server localhost>
   port = 8005
   listen = 127.0.0.1
   docroot = /home/ziel/www/CatsScript/src/
   appmods = </, myappmod>
</server> 
Run Code Online (Sandbox Code Playgroud)

来自http://yaws.hyber.org/appmods.yaws myappmod.erl:

-module(myappmod2).
-author('klacke@bluetail.com').

-include("/home/ziel/erlang/yaws/include/yaws_api.hrl").
-compile(export_all).

box(Str) ->
    {'div',[{class,"box"}],
    {pre,[],Str}}.

out(A) ->
     {ehtml,
     [{p,[],
     box(io_lib:format("A#arg.appmoddata = ~p~n"
                       "A#arg.appmod_prepath = ~p~n"
                       "A#arg.querydata = ~p~n",
                       [A#arg.appmoddata,
                        A#arg.appmod_prepath,
                        A#arg.querydata]))}]}.
Run Code Online (Sandbox Code Playgroud)

当我第一次使用它时它起作用了.但后来当我在myappmod.erl中更改了某些内容时,服务器的响应没有任何变化.比我删除myappmod.erl,但它仍然有效.我该怎么做才能做些改变?

Ste*_*ski 14

当你启动Yaws时,它最终引用你的myappmod2模块,导致Erlang运行时加载通过编译模块产生的beam文件.加载后,它会一直加载,直到您强行重新加载它,例如通过交互式Erlang shell,或者停止并重新启动Yaws和Erlang运行时.只需从外部重新编译模块就不会重新加载它.

如果您通过交互式方式运行Yaws yaws -i,则可以在启动时点击"enter"以获取交互式Erlang shell.如果更改了appmod模块并重新编译它,请确保将新梁文件复制到旧模块上,然后只需键入l(myappmod2).交互式shell,然后按Enter键重新加载myappmod2模块(并且不要忘记关闭括号后的句点) ).那个小写lErlang shell的load命令.您也可以使用c(myappmod2).命令直接在shell中编译模块,该命令将编译并加载它(假设没有编译错误).

如果您以非交互方式运行Yaws,例如作为常规后台守护程序进程,则可以通过运行以下命令将模块重新加载到其中:

yaws --load myappmod2
Run Code Online (Sandbox Code Playgroud)

--load如果要一次加载所有选项,可以在选项后添加多个模块名称.如果您的Yaws实例具有特定ID,请确保您还使用适当的--id选项来识别它.

如果您对自动重新加载重新编译的模块感兴趣,可以查看reloader.erl模块,它会监视重新编译的模块并自动加载它们.我不推荐它用于生产用途,但它可以方便开发.