2016-07-20 8 views
1

I GPROC als Abhängigkeit innerhalb der App zu starten versuchen, aber es funktioniert nicht mit:startet GPROC als Abhängigkeit

{error,{not_started,gproc}} 

Dies ist meine app.src Datei, die durch Rebar3 verwendet wird, wenn Kompilieren:

{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, []} 
]}. 

Wenn aus der Schale mit application:start(gproc). beginnen und dann application:start(myapp). alles funktioniert wunderbar. Ich verstehe nicht warum ...

Vielleicht ist es wegen einer Art von Race Condition?

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

Edit:: mit

Die Shell gestartet Wenn rebar3 shell mit allem funktioniert gut, was ist der Unterschied von dem Shell-Befehl verwende ich?

Antwort

1

Verwenden

application:ensure_all_started(myapp). 

Die Ebene start nur die angeforderte Anwendung nur versucht zu starten Verifizieren, dass die Abhängigkeiten bereits ausgeführt werden.

Docs:

  • application:start/1:

    Startet Anwendung. Wenn es nicht geladen ist, lädt der Anwendungscontroller es zuerst mit load/1. Es stellt sicher, dass alle enthaltenen Anwendungen geladen sind, startet sie jedoch nicht. Es wird angenommen, dass dies im Code für die Anwendung berücksichtigt wird.

  • application:ensure_all_started/1:

    Equivalent zum Aufruf von Start/1,2 wiederholt alle Abhängigkeiten, die für eine Anwendung noch nicht gestartet werden

+0

Thank you! Schwer zu finden in der Dokumentation. Wenn jemand es nachschlagen möchte: http://erlang.org/doc/man/application.html –

Verwandte Themen