erlang 多环境发布

参考链接

步骤

创建项目

1
2
3
4
rebar3 new release demo
cd demo/apps/
rebar3 new app demo1
rebar3 new app demo2

rebar 配置

demo1, demo2 等为自动启动的 application

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
% 编译时配置
{erl_opts, [debug_info]}.
{deps, []}.

% 发布时配置
% 默认配置
% release 需要在这里统一配置
{relx, [
{release, {demo, "0.1.0"}, [
sasl,
demo1,
demo2
]},

{mode, dev}
]}.

% 特定模式的配置,缺乏的从默认发布时配置里面拿
{profiles, [
{dev,
[
{erl_opts, [native, {hipe, [verbose]}, debug_info]},
{relx, [
{mode, dev},
{vm_args_src, "config/dev/vm.args.src"},
{sys_config_src, "config/dev/sys.config.src"}]
}
]
},
{prod,
[
% 编译时就需要 key 文件
% {erl_opts, [encrypt_debug_info]},
% 反编译时才需要 key 文件
% {erl_opts, [debug_info,{debug_info_key,{des3_cbc,"12345"}}]},
{erl_opts, [no_debug_info]},
{relx, [
% 这个参数自动设置 include_erts
{mode, prod},
{vm_args_src, "config/prod/vm.args.src"},
{sys_config_src, "config/prod/sys.config.src"}]
}
]
},
{test,
[
{erl_opts, [{native, o3}]},
{relx, [
{dev_mode, false},
{include_erts, false},
{include_src, false},
{vm_args_src, "config/test/vm.args.src"},
{sys_config_src, "config/test/sys.config.src"}]
}
]
}
]}.

发布

生成 release 目录

1
2
REBAR_PROFILE=prod rebar3 release -o ~/downloads
rebar3 as prod release -o ~/downloads

打包

1
2
REBAR_PROFILE=prod rebar3 tar -o ~/downloads
rebar3 as prod tar -o ~/downloads