2

main_app、app1、app2 を含む包括的なプロジェクトがあります。main_app は単独で動作することも、app1 および app2 と連携して管理することもできます。

app1 と app2 の起動に関する決定は、外部側 (ユーザーが入力した特別な構成ファイル) にあります。

その一部である 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すると、app1 と app2 を管理できます。しかし、リリースをsudo rebar3 as prod tar- でパックすると、app1 と app2 のビーム ファイルを含まない tar アーカイブを取得します。リストのリリース セクションに app1 と app2 を配置するとkernel, sasl, main_app、必要なアプリがリリースに追加されますが、自動的に起動されます (自分で起動する必要があります)。

すべてのライブラリまたはアプリケーションを tar リリースに追加するように rebar を構成する方法を教えてください。

前もって感謝します!

4

1 に答える 1

4

{app, load}次の構文を使用します。

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

そうすれば、アプリケーションはロードされますが、開始されません。アプリケーションをロードしたり起動したりしたくない場合は、 を使用します{app, none}(ただし、コードはまだロードされています)。

于 2020-10-07T17:27:55.617 に答える