【问题标题】:How to change Yaws appmods files?如何更改 Yaws appmods 文件?
【发布时间】:2012-07-03 22:32:31
【问题描述】:

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

【问题讨论】:

  • 你是否重新编译了.erl文件?
  • appmods 是普通的 erlang 模块,因此必须编译它们以反映更改。

标签: erlang yaws


【解决方案1】:

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

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

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

yaws --load myappmod2

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

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

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 2020-02-02
    • 2010-11-02
    • 2017-03-30
    • 2012-10-24
    • 2014-07-28
    • 2013-08-19
    • 2020-02-04
    • 2011-12-12
    相关资源
    最近更新 更多