如何运行erlang(rebar build)应用程序

cyr*_*llk 14 erlang rebar

我是Erlang世界的新手,目前无法弄清楚如何启动我的虚拟erlang应用程序.可能,我只是遗漏了一些东西......所以,我用rebar创建了一个应用程序(rebar create-app appid = dummys).

目前我有

  • rebar.config
  • SRC/dummys.app.src
  • SRC/dummys_app.erl
  • SRC/dummys_sup.erl

我发现为了在开发期间运行应用程序,最好创建一个应该调用application:start(module)的额外start方法.

我在启动方法中添加了一些基本的日志记录.

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().
Run Code Online (Sandbox Code Playgroud)

如果我试试

erl -noshell -pa ebin -s application start dummys
erl -noshell -pa ebin -s application start dummys_app
Run Code Online (Sandbox Code Playgroud)

没有输出..

如果我试试

erl -noshell -pa ebin -s dummys start
Run Code Online (Sandbox Code Playgroud)

erl因错误而崩溃..

如果我试试

erl -noshell -pa ebin -s dummys_app start
Run Code Online (Sandbox Code Playgroud)

它输出的只是" 启动应用程序(开发)... "而这就是全部.但我也希望看到"正在开始使用.. "

我错过了什么或做错了什么?

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

另一个问题:如何正确地向我的虚拟应用程序添加新模块?例如,我有一个名为"*dummys_cool*"的附加模块,它有一个" 开始 "方法.如何告诉我的应用程序运行"dummys_cool #start"方法?

谢谢!

小智 14

为了快速开发,如果您只是想确保您的应用程序可以启动,请启动shell,然后启动应用程序:

erl -pa ebin
1> dummys_app:start().
Run Code Online (Sandbox Code Playgroud)

这将为你提供一个干净的指示,告诉你什么是错的,没有贝壳轰炸之后.

由于您要创建一个应用程序来运行,而不仅仅是要共享的库,因此您需要发布一个版本.钢筋可以帮助你完成大部分工作:

mkdir rel
cd rel
rebar create-node nodeid=dummysnode
Run Code Online (Sandbox Code Playgroud)

编译完应用程序后,可以创建一个版本:

rebar generate
Run Code Online (Sandbox Code Playgroud)

这将构建一个可移植版本,其中包括所有必需的库甚至是erlang运行时系统.这默认放在rel /目录中; 在您的情况下rel/dummys.

在该目录中,将有一个控制脚本,您可以使用该脚本来启动,停止和附加到应用程序:

rel/dummys/bin/dummys start
rel/dummys/bin/dummys stop
rel/dummys/bin/dummys start
rel/dummys/bin/dummys attach
Run Code Online (Sandbox Code Playgroud)