我正在尝试管理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
模块(并且不要忘记关闭括号后的句点) ).那个小写l
是Erlang shell的load命令.您也可以使用c(myappmod2).
命令直接在shell中编译模块,该命令将编译并加载它(假设没有编译错误).
如果您以非交互方式运行Yaws,例如作为常规后台守护程序进程,则可以通过运行以下命令将模块重新加载到其中:
yaws --load myappmod2
Run Code Online (Sandbox Code Playgroud)
--load
如果要一次加载所有选项,可以在选项后添加多个模块名称.如果您的Yaws实例具有特定ID,请确保您还使用适当的--id
选项来识别它.
如果您对自动重新加载重新编译的模块感兴趣,可以查看reloader.erl模块,它会监视重新编译的模块并自动加载它们.我不推荐它用于生产用途,但它可以方便开发.