Erlang 工具:rebar

创建工程

$ ./rebar create-app appid=dummy_proj
==> dummy_proj (create-app)
Writing src/dummy_proj.app.src  
Writing src/dummy_proj_app.erl  
Writing src/dummy_proj_sup.erl  

编译

编辑 rebar.conf

{require_min_otp_vsn, “R15”}.
{erl_opts, [{i, “include”},
{src_dirs, [“src”, “test”]}]}.
{sub_dirs, [“rel”]}.
{lib_dirs,[“lib”, “plugins”]}.
{deps_dir, [“deps”]}.
{erl_opts, [debug_info, fail_on_warning]}.

编译:

$ ./rebar compile
==> dummy_proj (compile)
Compiled src/dummy_proj_sup.erl  
Compiled src/dummy_proj.erl  
Compiled src/dummy_proj_server.erl  
==> rel (compile)
==> dummy_proj (compile)

运行

$ erl -pa ebin/ -pa deps/*/ebin/ -s dummy_proj

发布

用 Erlang 的发布工具,可以把整个 Erlang 的运行环境全部放到一个目录下。

$ mkdir rel
$ cd rel/
$ ../rebar create-node nodeid=dummynode
==> rel (create-node)
Writing reltool.config  
Writing files/erl  
Writing files/nodetool  
Writing files/dummynode  
Writing files/app.config  
Writing files/vm.args  

配置文件

如果存在 files/sys.config,rebar 会优先用作应用的配置文件,如果不存在,使用 files/app.config。我们一般习惯使用 app.config。

$ mv files/sys.config files/app.config

删除 files/reltool.config 中:

{copy, “files/sys.config”, “releases/\{\{rel_vsn\}\}/sys.config”},

添加:

{template, “files/app.config”, “etc/app.config”}
$ ./rebar generate==> rel (generate)
$ cd rel/dummynode

新版的 rebar 会优先使用 sys.config,我们也会逐渐迁移到 sys.config,现在的原则是不同时用sys.config, app.config 如果使用 sys.config,则不要删除 sys.config。 注意:当 sys.config 存在时,app.config 不能生效。

用 rebar 生成发布文件

修改 rel/reltool.config, 为依赖的 app 指定路径,增加 ../deps 到 lib_dirs:

{lib_dirs, ["../deps"]},

修改 rel/reltool.config,为 dummynode 这个应用指定路径:

{app, dummynode, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]}

lib_dir 是包含 dummynode 应用的 ebin 目录的路径。这里 .. 代表 rel 目录的上层目录。

# 运行 以 console 方式运行

$ ./bin/dummynode console

以 daemon 方式运行

$ ./bin/dummynode start

连接到已经运行的 daemon

$ ./bin/dummynode attach

Ctrl-D 退出