1

アプリ内の依存関係としてgprocを起動しようとしていますが、次のエラーで失敗します:

{error,{not_started,gproc}}

これは、コンパイル時に Rebar3 によって使用される私の app.src ファイルです。

{application, myapp,
 [{description, "MyApp"},
  {vsn, "0.1.0"},
  {registered, []},
  {mod, { my_app, []}},
  {applications,
   [kernel,
    stdlib,
    sasl,
    gproc    <--- Dependency, and is compiled with Rebar3
   ]},
  {env,[]},
  {modules, []},

  {maintainers, []},
  {licenses, []},
  {links, []}
 ]}.

シェルから開始するapplication:start(gproc).と、application:start(myapp).すべてが美しく機能します。理由がわかりません...

多分それはある種の競合状態のためですか?

シェルは次のように開始されます。

erl -pa _build/default/lib/*/ebin -boot start_sasl -eval "application:start(myapp)"

編集:すべて正常に動作する場合、使用rebar3 shellしているシェル コマンドとの違いは何ですか?

4

1 に答える 1

1

使用する

application:ensure_all_started(myapp).

プレーンstartは、依存関係が既に実行されていることを確認するだけで、要求されたアプリケーションのみを開始しようとします。

ドキュメント:

  • application:start/1:

    アプリケーションを開始します。ロードされていない場合、アプリケーション コントローラは最初に load/1 を使用してロードします。含まれているすべてのアプリケーションが確実に読み込まれるようにしますが、起動はしません。これは、アプリケーションのコードで処理されると想定されています。

  • application:ensure_all_started/1:

    アプリケーションでまだ開始されていないすべての依存関係に対して start/1,2 を繰り返し呼び出すのと同じです。

于 2016-07-21T02:18:53.830 に答える