启动GProc作为依赖项

时间:2016-07-20 21:24:32

标签: erlang rebar3

我正在尝试在应用内部启动 gproc 作为依赖,但它失败了:

{error,{not_started,gproc}}

这是我的app.src文件,在编译时由Rebar3使用:

{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).的shell开始时,一切都很好用。我不明白为什么......

也许是因为某种竞争条件?

shell以:

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

编辑:使用rebar3 shell时一切正常,与我使用的shell命令有什么不同?

1 个答案:

答案 0 :(得分:1)

使用

application:ensure_all_started(myapp).

普通start尝试仅启动所请求的应用程序,仅验证依赖项已在运行。

文档:

  • application:start/1

      

    启动应用程序。如果未加载,则应用程序控制器首先使用load / 1加载它。它确保加载任何包含的应用程序,但不启动它们。假设在应用程序的代码中处理了这一点。

  • application:ensure_all_started/1

      

    相当于对尚未为应用程序启动的所有依赖项重复调用start / 1,2