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 シェルなどを使用して強制的に再読み込みするか、Yaws と Erlang ランタイムを停止して再起動するまで、読み込まれたままになります。モジュールを外部から再コンパイルするだけでは、再ロードされません。

Yaws を 経由でインタラクティブに実行する場合yaws -i、起動後に「Enter」を押してインタラクティブな Erlang シェルを取得できます。appmod モジュールを変更して再コンパイルする場合は、新しいビーム ファイルを古いファイルの上にコピーしてからl(myappmod2).、対話型シェルを入力し、Enter キーを押してモジュールをリロードしてmyappmod2ください (閉じ括弧の後のピリオドを忘れないでください)。 )。この小文字lは、Erlang シェルの load コマンドです。コマンドを使用して、モジュールをシェルで直接コンパイルすることもできます。これにより、モジュールc(myappmod2).がコンパイルおよびロードされます (コンパイル エラーがないと仮定します)。

Yaws を非対話的に実行している場合、たとえば通常のバックグラウンド デーモン プロセスとして実行している場合は、次のコマンドを実行してモジュールをそこにリロードできます。

yaws --load myappmod2

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

再コンパイルされたモジュールの自動リロードに興味がある場合は、再コンパイルされたモジュールを監視して自動的にロードするreloader.erlモジュールのようなものを調べることができます。本番環境での使用はお勧めしませんが、開発には便利です。

于 2012-07-04T13:39:11.770 に答える