The problems I am encountering in learning erlang on Fedora 20 is helping me understand erlang better :)
I had to install erlang-ibrowse and erlang-meck even for starting the skeleton application. They should probably be included in the dependencies of erlang-webmachine rpm.
The template for creating the skeleton application is included in
/usr/lib64/erlang/lib/webmachine-1.10.1/priv/templates.
To create a new skeleton app:
$ cd /usr/lib64/erlang/lib/webmachine-1.10.1/priv
$ rebar create template=wmskel prefix= appid=
$ cd
$ rebar compile
The wmskel.template needed to be modified to comment out the following lines related to rebar:
%{file, "{{webmachine}}/rebar", "{{prefix}}/rebar"}.
%{chmod, 8#744, "{{prefix}}/rebar"}.
The version number in rebar.config also needed to be changed from 1.9.* to 1.10.*
However, execution of start.sh fails with the error:
init terminating in do_boot ()
The issue was that in.erl, the following statement fails:
ensure_started(mochiweb),
It appears that some of the dependencies of mochiweb are not implicitly started. I am not sure if I am missing something, this is a fedora specific issue or a current mochiweb version issue. A work around was to modify the start function in src/.erl adding the lines in bold:
start() ->
ensure_started(inets),
ensure_started(crypto),
ensure_started(asn1),
ensure_started(public_key),
ensure_started(ssl),
ensure_started(xmerl),
ensure_started(compiler),
ensure_started(syntax_tools),
ensure_started(mochiweb),
application:set_env(webmachine, webmachine_logger_module,
webmachine_logger),
ensure_started(webmachine),
application:start(webmachine_demo).
For diagnosing, modifying ensure_started function in the same file helped.
ensure_started(App) ->
case application:start(App) of
ok ->
ok;
{error, {already_started, App}} ->
ok;
X -> io:format("App failed ~w ~w~n",[App, X])
end.
Now,
$ rebar compile
$ ./start.sh
http://localhost:8000 should show "Hello, new world".
It may be preferable to modify the start function in templates/src/wmskel.erl.
I had to install erlang-ibrowse and erlang-meck even for starting the skeleton application. They should probably be included in the dependencies of erlang-webmachine rpm.
The template for creating the skeleton application is included in
/usr/lib64/erlang/lib/webmachine-1.10.1/priv/templates.
To create a new skeleton app:
$ cd /usr/lib64/erlang/lib/webmachine-1.10.1/priv
$ rebar create template=wmskel prefix=
$ cd
$ rebar compile
The wmskel.template needed to be modified to comment out the following lines related to rebar:
%{file, "{{webmachine}}/rebar", "{{prefix}}/rebar"}.
%{chmod, 8#744, "{{prefix}}/rebar"}.
The version number in rebar.config also needed to be changed from 1.9.* to 1.10.*
However, execution of start.sh fails with the error:
init terminating in do_boot ()
The issue was that in
ensure_started(mochiweb),
It appears that some of the dependencies of mochiweb are not implicitly started. I am not sure if I am missing something, this is a fedora specific issue or a current mochiweb version issue. A work around was to modify the start function in src/
start() ->
ensure_started(inets),
ensure_started(crypto),
ensure_started(asn1),
ensure_started(public_key),
ensure_started(ssl),
ensure_started(xmerl),
ensure_started(compiler),
ensure_started(syntax_tools),
ensure_started(mochiweb),
application:set_env(webmachine, webmachine_logger_module,
webmachine_logger),
ensure_started(webmachine),
application:start(webmachine_demo).
For diagnosing, modifying ensure_started function in the same file helped.
ensure_started(App) ->
case application:start(App) of
ok ->
ok;
{error, {already_started, App}} ->
ok;
X -> io:format("App failed ~w ~w~n",[App, X])
end.
Now,
$ rebar compile
$ ./start.sh
http://localhost:8000 should show "Hello, new world".
It may be preferable to modify the start function in templates/src/wmskel.erl.
No comments:
Post a Comment