2012-07-03 3 views
6

私はYast appmodを管理しようとしています。だから、:http://yaws.hyber.org/appmods.yaws myappmod.erlからYawsのappmodsファイルを変更するには?

<server localhost> 
    port = 8005 
    listen = 127.0.0.1 
    docroot = /home/ziel/www/CatsScript/src/ 
    appmods = </, myappmod> 
</server> 


yaws.conf

-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シェルを取得するために起動すると「enter」を押すことができます。 appmodモジュールを変更して再コンパイルする場合は、新しいビームファイルを古いものにコピーしてから、対話シェルにl(myappmod2).と入力してから、Enterキーを押してmyappmod2モジュールをリロードしてください閉じ括弧)。小文字のlErlang shell's load commandです。 c(myappmod2).コマンドを使用してモジュールをシェルで直接コンパイルすることもできます。コンパイルとロードはコンパイルエラーがないと仮定して行います。

あなたはイチゴ腫、非対話的に実行している場合は、定期的なバックグラウンドデーモンプロセスとして、次のコマンドを実行して、その中にモジュールをリロードすることができると言う:

yaws --load myappmod2 

あなたは--loadオプションの後に、複数のモジュール名を置くことができます一度にすべてをロードしたい場合は、 Yawsインスタンスに特定のIDがある場合は、適切な--idオプションを使用して識別してください。

再コンパイルされたモジュールの自動リロードに興味がある場合は、reloader.erlモジュールを調べると、再コンパイルされたモジュールが監視され、自動的にロードされます。私はプロダクション用にはお勧めしませんが、開発には便利です。

関連する問題