如何改变Yaws appmods文件?

时间:2012-07-03 13:19:38

标签: erlang yaws

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

<server localhost>
   port = 8005
   listen = 127.0.0.1
   docroot = /home/ziel/www/CatsScript/src/
   appmods = </, myappmod>
</server> 

来自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]))}]}.

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

1 个答案:

答案 0 :(得分:14)

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

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

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

yaws --load myappmod2

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

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