2015-07-09 9 views
5

Pracuję nad wdrożeniem superwizora po raz pierwszy i mam problemy, których nie mogę zrozumieć z dokumentacji. Konkretnie, gdy próbuję uruchomić mój proces przy użyciu SlowRamp.flood, otrzymuję {:error, {:invalid_child_spec, []}}.Eliksir: invalid_child_spec dla nadzorowanego procesu. Nie mogę zrozumieć, dlaczego

Jest to bardzo prosta aplikacja i została stworzona za pomocą miksu new slow_ramp --sup.

Główny plik w ./lib/slow_ramp.ex jest:

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 

Moja funkcja dziecko/plik jest w ./lib/SlowRamp/flood.ex i wygląda następująco:

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 

Każda pomoc będzie bardzo mile widziane. Dzięki!

Odpowiedz

3

Problem polega na

Supervisor.start_child(SlowRamp.Supervisor, []) 

Trzeba poprawną specyfikację dzieci, jak:

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

Ów powodu jej powiedzieć, że spec dziecko jest nieprawidłowy

+0

Ach, miałem źle jak to działało. Dziękuję Ci! Naprawdę doceniam pomoc! – kkirsche

+4

Doskonała odpowiedź. Opieramy się zbytnio na przełożonych Erlang tutaj ... moglibyśmy mieć lepsze komunikaty o błędach i pewnego dnia (mam nadzieję!). –

Powiązane problemy