2012-07-03 66 views
6

我正在嘗試管理Yast appmod。所以:
yaws.conf:如何更改Yaws appmods文件?

<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('[email protected]'). 

-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

您是否重新編譯過.erl文件? –

+0

appmods是正常的erlang模塊,因此它們必須編譯以反映更改。 –

回答

14

當您啓動Yaws時,它最終會引用您的myappmod2模塊,從而導致Erlang運行時加載編譯模塊產生的波束文件。一旦加載完成,它將保持加載狀態,直到您強制重新加載(例如通過交互式Erlang外殼程序),或停止並重新啓動Yaws和Erlang運行時。從外部重新編譯模塊不會重新加載它。

如果您通過yaws -i以交互方式運行Yaws,那麼一旦它啓動以獲得交互式Erlang外殼,就可以點擊「回車」。如果您更改了一個appmod模塊並重新編譯它,請確保您將新的光束文件複製到舊的光束文件上,然後只需在交互式shell中鍵入l(myappmod2).,然後按Enter鍵以重新加載myappmod2模塊(並且不要忘記右括號)。小寫字母lErlang shell's load command。您也可以使用c(myappmod2).命令直接在shell中編譯模塊,該命令將編譯並加載它(假設沒有編譯錯誤)。

如果你有雅司運行非交互,也就是說,作爲一個定期後臺守護進程,您可以通過運行以下命令重新加載模塊到它:

yaws --load myappmod2 

您可以--load選項後,將多個模塊名稱如果你想一次加載它們。如果您的Yaws實例具有特定的ID,請確保您也使用相應的--id選項來標識它。

如果您對自動重新編譯的模塊感興趣,可以看看reloader.erl模塊,它監視重新編譯的模塊並自動加載它們。我不會推薦它用於生產用途,但它可以用於開發。