7

我正在尝试管理 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,但它仍然有效。我应该怎么做才能做出一些改变?

4

1 回答 1

15

当您启动 Yaws 时,它最终会引用您的myappmod2模块,从而导致 Erlang 运行时加载通过编译模块生成的梁文件。一旦它被加载,它就会一直加载,直到你强制重新加载它,例如通过交互式 Erlang shell,或者通过停止和重新启动 Yaws 和 Erlang 运行时。简单地从外部重新编译模块不会重新加载它。

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

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

yaws --load myappmod2

--load如果你想一次加载它们,你可以在选项后面加上多个模块名称。如果您的 Yaws 实例有一个特定的 id,请确保您还使用适当的--id选项来识别它。

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

于 2012-07-04T13:39:11.770 回答