我正在尝试管理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,但它仍然有效。我该怎么做才能做些改变?
答案 0 :(得分:14)
当你启动Yaws时,它最终引用你的myappmod2
模块,导致Erlang运行时加载通过编译模块产生的beam文件。加载后,它会一直加载,直到您强行重新加载它,例如通过交互式Erlang shell,或者停止并重新启动Yaws和Erlang运行时。只需从外部重新编译模块就不会重新加载它。
如果您通过yaws -i
以交互方式运行Yaws,则可以在启动时点击“enter”以获取交互式Erlang shell。如果更改appmod模块并重新编译它,请确保将新的beam文件复制到旧模块上,然后只需在交互式shell中键入l(myappmod2).
,然后按Enter键重新加载myappmod2
模块(和不要忘记关闭括号后的句号)。小写l
是Erlang shell's load command。您还可以使用c(myappmod2).
命令直接在shell中编译模块,该命令将编译并加载它(假设没有编译错误)。
如果Yaws以非交互方式运行,例如作为常规后台守护程序进程,则可以通过运行以下命令将模块重新加载到其中:
yaws --load myappmod2
如果要一次加载所有模块名称,可以在--load
选项后面添加多个模块名称。如果您的Yaws实例具有特定ID,请确保您还使用相应的--id
选项来识别它。
如果您对自动重新加载重新编译的模块感兴趣,可能会查看类似reloader.erl模块的内容,该模块会监视重新编译的模块并自动加载它们。我不推荐它用于生产用途,但它可以方便开发。