2012-07-03 11 views
6

Ich versuche Yast Appmod zu verwalten. Also:
yaws.conf:Wie ändere ich Yaws appmods Dateien?

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

von 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]))}]}. 

Und es funktionierte, als ich es erstmals zum Einsatz. Aber später, als ich etwas in myappmod.erl änderte nichts als Antwort vom Server. Dann habe ich meineappmod.erl gelöscht, aber es funktioniert immer noch. Was muss ich tun, um Änderungen vorzunehmen?

+1

Haben Sie die .erl-Datei neu kompiliert? –

+0

appmods sind normale Erlang-Module und daher müssen sie kompiliert werden, um die Änderungen widerzuspiegeln. –

Antwort

14

Wenn Sie Yaws starten, verweist es eventuell auf Ihr myappmod2-Modul, wodurch die Erlang-Laufzeit die durch Kompilieren des Moduls erzeugte Strahldatei lädt. Sobald es geladen ist, bleibt es solange geladen, bis Sie es entweder zwangsweise neu laden, z. B. über die interaktive Erlang-Shell, oder indem Sie Yaws und die Erlang-Laufzeit stoppen und neu starten. Einfach das Modul von außen neu kompilieren lädt es nicht neu.

Wenn Sie Yaws interaktiv über yaws -i ausführen, können Sie nach dem Start "Enter" drücken, um eine interaktive Erlang-Shell zu erhalten. Wenn Sie ein Appmod-Modul ändern und es neu kompilieren, stellen Sie sicher, dass Sie die neue Strahldatei über die alte kopieren und dann l(myappmod2). in die interaktive Shell eingeben und dann Enter drücken, um das Modul myappmod2 neu zu laden (und vergessen Sie nicht die Zeit nach der enge Klammer). Dieser Kleinbuchstabe l ist der Erlang shell's load command. Sie könnten das Modul auch direkt in der Shell kompilieren, indem Sie den Befehl c(myappmod2). verwenden, der es kompiliert und lädt (vorausgesetzt, es liegen keine Kompilierungsfehler vor).

Wenn Sie Yaws nicht interaktiv, sagen als regelmäßigen Hintergrund Daemon-Prozess ausgeführt wird, können Sie Module in sie, indem Sie den folgenden Befehl neu laden kann: kann

yaws --load myappmod2 

Sie mehrere Modulnamen nach der --load Put-Option wenn Sie alle auf einmal laden möchten. Wenn Ihre Yaws-Instanz eine spezifische ID hat, stellen Sie sicher, dass Sie auch die entsprechende --id-Option verwenden, um sie zu identifizieren.

Wenn Sie neu kompilierte Module automatisch neu laden möchten, sehen Sie sich vielleicht das Modul reloader.erl an, das nach neu kompilierten Modulen sucht und diese automatisch lädt. Ich würde es nicht für die Produktion empfehlen, aber es kann für die Entwicklung nützlich sein.