Erlang /Rebar 3-如何添加一个要发布但不启动的应用程序?

cwxwcias  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(160)

我有一个伞项目,包括main_app,app 1,app 2。main_app可以单独工作,也可以与app 1和app 2一起工作并管理它们。
关于启动app 1和app 2的决定在外部(由用户填写的特殊配置文件)。
我使用rebar.config,其中一部分是:

{lib_dirs, ["apps"]}.
{sub_dirs, [
  "apps/main_app",
  "apps/app1",
  "apps/app2"
]}.

{relx, [{release, {main_app, "0.8.6"},
         [kernel,
          sasl,
          main_app]},
        {sys_config,  "./config/sys.config"},
        {vm_args,     "./config/vm.args"},
        {dev_mode, true},
        {include_src, true},
        {include_erts, false},
        {extended_start_script, true}]
}.

{profiles, [
  {prod, [
    {relx, [
      {dev_mode, false},
      {include_erts, false},
      {include_src, false},
      {sys_config,  "./config/prod_sys.config"},
      {vm_args,     "./config/prod_vm.args"}
    ]}
  ]}
]}.

如果我使用sudo rebar3 shell-我可以管理app 1和app 2。但是如果我用sudo rebar3 as prod tar打包一个发布版本-我会得到一个tar存档,其中不包括app 1和app 2的beam文件。我知道,如果我用kernel, sasl, main_app将app 1和app 2放在发布列表中-我需要的应用程序将被添加到发布版本中,但它们将自动启动(我需要自己启动)!
如何配置rebar将所有库或应用程序添加到tar版本,但在启动main_app时不启动它们?
提前感谢!

trnvg8h3

trnvg8h31#

使用{app, load}语法:

{relx, [
    {release, { Project, Version }, [
        {app1, load}
...

如果你不想加载也不想启动应用程序,可以使用{app, none}(尽管代码仍然是加载的)。

相关问题