Quando si utilizza Mix per creare un'applicazione, aggiunge sempre un file di supervisione root al progetto. Nota come la matrice 'child spec' nella funzione supervise è vuota.Elisir/Erlang e Cowboy - Come usare i supervisori
app.ex:
defmodule App.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(args) do
supervise([], [strategy: :one_for_one])
end
end
un punto di ingresso per l'applicazione è stato creato anche per voi. Lavorando attraverso alcuni degli esempi che ho trovato on-line, ho scritto il seguente:
defmodule App do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{
:_,
[
# Simple JSON test.
{"/test", app.Handle.test, []},
]
}
])
{:ok, _} = :cowboy.start_http(
:http,
100,
[{:port, 8080}],
[{ :env, [{:dispatch, dispatch}]}]
)
App.Supervisor.start_link()
end
end
opere Questa applicazione, ma funziona anche se mi tolgo la chiamata a App.Supervisor.start_link() in App.start().
Quindi qual è il supervisore in questo caso? Se le specifiche del bambino per il supervisore sono vuote, allora qual è il punto?
Ad esempio, nell'esempio Elixir trovato qui - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - Si può vedere che la chiamata per avviare il supervisore è commentata sulla linea 65.
Ma in un Cowboy Erlang ad esempio ufficiale, questo file - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - Crea un supervisore root simile senza specifiche figlio, quindi chiama il file principale dell'applicazione qui, sulla riga 22 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl