2015-07-09 9 views
5

Ich arbeite an der Implementierung eines Supervisors zum ersten Mal und ich stoße auf Probleme, die ich nicht aus der Dokumentation herausfinden kann. Insbesondere wenn ich versuche, meinen Prozess mit SlowRamp.flood zu starten, erhalte ich {:error, {:invalid_child_spec, []}}.Elixier: invalid_child_spec für überwachten Prozess. Kann nicht herausfinden, warum

Dies ist eine sehr einfache Anwendung und wurde mit Mix new slow_ramp --sup gemacht.

Die Hauptdatei in ./lib/slow_ramp.ex ist:

defmodule SlowRamp do 
    use Application 

    # See http://elixir-lang.org/docs/stable/elixir/Application.html 
    # for more information on OTP Applications 
    def start(_type, _args) do 
    import Supervisor.Spec, warn: false 

    children = [ 
     worker(SlowRamp.Flood, []) 
    ] 

    # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html 
    # for other strategies and supported options 
    opts = [strategy: :one_for_one, name: SlowRamp.Supervisor] 
    Supervisor.start_link(children, opts) 
    end 

    def flood do 
    Supervisor.start_child(SlowRamp.Supervisor, []) 
    end 
end 

Mein Kind Funktion/Datei in ./lib/SlowRamp/flood.ex ist und sieht wie folgt aus:

defmodule SlowRamp.Flood do 
    def start_link do 
    Task.start_link(fn -> start end) 
    end 

    defp start do 
    receive do 
     {:start, host, caller} -> 
     send caller, System.cmd("cmd", ["opt"]) 
    end 
    end 
end 

Jede Hilfe sehr geschätzt würde. Vielen Dank!

Antwort

3

Das Problem ist

Supervisor.start_child(SlowRamp.Supervisor, []) 

Sie benötigen eine gültige Kind Spezifikation, wie:

def flood do 
    import Supervisor.Spec 
    Supervisor.start_child(SlowRamp.Supervisor, worker(SlowRamp.Flood, [], [id: :foo])) 
end 

Das ist der Grund seiner zu sagen, dass das Kind spec

+0

Ah ungültig ist, hatte ich das falsch verstanden wie das funktioniert hat. Vielen Dank! Ich schätze die Hilfe sehr! – kkirsche

+4

Perfekte Antwort. Wir verlassen uns zu sehr auf Erlang Supervisors ... wir könnten bessere Fehlermeldungen haben und eines Tages werden wir (hoffentlich!). –

Verwandte Themen