De cateva zile incerc sa construiesc aplicatii Erlang cu ajutorul utilitarului rebar: generez o aplicatie din lista de exemple (sabloane) rebar, o editez sa corespunda cu proiectele mele, apoi o compilez automat cu rebar impreuna cu aplicatiile de care depinde. (Nu imi place rebar3, inca nu sunt pregatit sa-l inteleg.)
Teoretic, orice aplicatie Erlang construita cu rebar in windows se compileaza si se executa cu:
@echo off
rem pentru obtinerea modulelor externe de care depinde aplicatia
escript rebar get-deps
rem pentru compilarea aplicatiei
escript rebar compile
rem pentru pornirea aplicatiei – comanda care merge bine numai in Unix si Linux
erl -noshell -pa deps/*/ebin -pa ebin -run numele_aplicatiei
Pentru Linux comenzile sunt asemanatoare (./rebar get-deps && ./rebar compile … sau rebar get-deps && rebar compile …)
Problema este ca primesc la executia aplicatiei o eroare (no error logger present), eroarea apare numai in windows, sunt aproximativ 600 de referinte si nici o solutie functionala: Google: "(no error logger present)" sau cu Duckduckgo: "(no error logger present)"
Solutia am gasit-o dupa 3-4 zile de cautari frustrante: trebuie sa construiesc corect calea de cautare a modulelor Erlang.
Program pentru windows care executa corect o aplicatie Erlang compilata cu rebar:
@echo off
rem mai intai compilez ce s-a modificat intre timp
escript rebar compile
echo.
echo.
echo.
rem apoi construiesc calea de cautare a modulelor
SET DEPSPATH=-pa ebin
FOR /f %%a IN ('dir /b deps\') do call :add_path %%a
rem si execut aplicatia
erl -noshell %DEPSPATH% -run numele_aplicatiei
rem pauza sa vad daca avem erori
pause
goto :eof
:add_path
rem o subrutina de cmd windows
SET DEPSPATH=%DEPSPATH% -pa deps/%1/ebin
goto :eof
Pentru fiecare folder-de-aplicatie din folderul deps trebuie adaugata calea catre folderul de module binare (ebin).
Pentru Linux este suficient: erl -noshell -pa deps/*/ebin -pa ebin -run numele_aplicatiei