2013-02-23 111 views
2

我想讓我的頭在OTP的主管和erlang這樣的(雖然我使用靈丹妙藥),我似乎無法弄清楚爲什麼主要的主管樹不會開始。不能讓主管工作

我正在一個HTTP服務器上有一個監聽者工作者,而一個監督者有處理程序(動態啓動)。我可以自己開始其中的每一個,如果偵聽器是樹中唯一的東西,我就可以啓動樹。

這裏的主管定義的靈藥

defmodule HTTPServer.Supervisor do 
    use Supervisor.Behaviour 

    def start_link(port) do 
    :supervisor.start_link({ :local, :sup }, __MODULE__, [port]) 
    end 

    def init(port) do 
    tree = [ 
     worker(HTTPServer.Listener, [port], id: :listener_sup), 
     supervisor(HTTPServer.HandlerSupervisor, [], shutdown: :infinity, 
                modules: []) 
    ] 
    supervise(tree, strategy: :one_for_one) 
    end 
end 

defmodule HTTPServer.HandlerSupervisor do 
    use Supervisor.Behaviour 

    def start_link(_) do 
    IO.puts "starting handler supervisor" 
    :supervisor.start_link({ :local, :handler_sup }, __MODULE__, []) 
    end 

    def init(_) do 
    tree = [ worker(HTTPServer.Handler, [], restart: :temporary, 
              id: nil) ] 
    supervise(tree, strategy: :simple_one_for_one) 
    end 

    def start_child([socket]) do 
    IO.puts "starting handler child" 
    :supervisor.start_child(:handler_sup, [socket]) 
    end 
end 

一些關於樹的主管定義是錯誤的,我想不出什麼,這似乎是基本上抱着我的項目回來的唯一的事情。

感謝您的幫助!

回答

0

我想通過試圖動態添加它來解釋它爲什麼適合。事實證明,HTTPServer.HandlerSupervisor.start_link的參數應該是0,而不是1.