erlangrebar

How to run erlang (rebar build) application


I am new to Erlang world and currently can't figure out how to start my dummy erlang application. Probably, I am just missing something... So, I created an application with rebar (rebar create-app appid=dummys).

Currently I have

I have found that in order to run an application during a development it is better to create an additional start method which should call application:start(module).

I added some basic logging to my start methods..

start() ->
    error_logger:info_msg("Starting app(dev)..~n"),
    application:start(dummys_app).

start(_StartType, _StartArgs) ->
    error_logger:info_msg("Starting app..~n"),
    dummys_sup:start_link().

If I try

erl -noshell -pa ebin -s application start dummys
erl -noshell -pa ebin -s application start dummys_app

there are no output..

If I try

erl -noshell -pa ebin -s dummys start

erl crashes with an error..

If I try

erl -noshell -pa ebin -s dummys_app start

it outputs just "Starting app(dev).." and that's all. But I also expect to see "Starting app.."

What I am missing or doing wrong??

=============

And another question: How to add a new module to my dummy application correctly? For example I have an additional module called "*dummys_cool*" which has a "start" method. How to tell my application to run that "dummys_cool#start" method?

Thank you!


Solution

  • For quick development, if you just want to ensure your appliction can start, start a shell, then start the application:

    erl -pa ebin
    1> dummys_app:start().
    

    That will give you a clean indication of what is wrong and right without the shell bombing out after.

    Since you're making an application to run, rather than just a library to share, you'll want to make a release. Rebar can get you most of the way there:

    mkdir rel
    cd rel
    rebar create-node nodeid=dummysnode
    

    After you've compiled your application, you can create a release:

    rebar generate
    

    This will build a portable release which includes all the required libraries and even the erlang runtime system. This is put by default in the rel/ directory; in your case rel/dummys.

    Within that directory there will be a control script that you can use to start, stop, and attach to the application:

    rel/dummys/bin/dummys start
    rel/dummys/bin/dummys stop
    rel/dummys/bin/dummys start
    rel/dummys/bin/dummys attach