2012-07-03 22 views
6

Próbuję zarządzać aplikacją Yast appmod. Więc:
yaws.conf:Jak zmienić pliki appmods Yaws?

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

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

I to działało, kiedy użył go po raz pierwszy. Ale później, kiedy zmieniłem coś w myappmod.erl nic się nie zmieniło w odpowiedzi od serwera. Następnie usunąłem plik myappmod.erl, ale nadal działa. Co powinienem zrobić, aby wprowadzić pewne zmiany?

+1

Czy skompilowałeś ponownie plik .erl? –

+0

appmods są normalnymi modułami erlang i dlatego MUSZĄ być kompilowane, aby odzwierciedlały zmiany. –

Odpowiedz

14

Po uruchomieniu programu Yaws ostatecznie odwołuje się do modułu myappmod2, powodując, że środowisko wykonawcze Erlang ładuje plik belki wygenerowany przez kompilację modułu. Po załadowaniu pozostaje załadowany, dopóki nie zostanie przymusowo załadowany, na przykład przez interaktywną powłokę Erlang, lub zatrzymując i ponownie uruchamiając Yaws i środowisko uruchomieniowe Erlang. Po prostu rekompilacja modułu z zewnątrz nie przeładowuje go.

Jeśli uruchomisz Yaws interaktywnie przez yaws -i, możesz nacisnąć "enter" po uruchomieniu, aby uzyskać interaktywną powłokę Erlang. Jeśli zmienisz moduł appmod i przekompilujesz go, upewnij się, że skopiowałeś nowy plik belki na stary, a następnie po prostu wpisz l(myappmod2). w powłoce interaktywnej, a następnie naciśnij Enter, aby przeładować moduł myappmod2 (i nie zapomnij o okresie po zamknięty nawias). Ta mała litera l to Erlang shell's load command. Możesz także skompilować moduł bezpośrednio w powłoce, używając polecenia c(myappmod2)., które skompiluje i załaduje (zakładając, że nie ma błędów kompilacji).

Jeśli masz frambezja działa non-interaktywnie, powiedzmy jako zwykłego procesu demona w tle, można przeładować moduły do ​​niego, uruchamiając następującą komendę:

yaws --load myappmod2 

Możesz umieścić kilka nazw modułów po opcji --load jeśli chcesz załadować je wszystkie naraz. Jeśli twoja instancja Yaws ma określony identyfikator, upewnij się, że używasz odpowiedniej opcji --id, aby ją zidentyfikować.

Jeśli interesuje Cię automatyczne przeładowywanie zrekompilowanych modułów, możesz zajrzeć do modułu podobnego do reloader.erl, który obserwuje przekompilowane moduły i ładuje je automatycznie. Nie polecałbym go do użytku produkcyjnego, ale może być przydatny do rozwoju.