Mix を使用してアプリケーションを作成すると、常にルート スーパーバイザ ファイルがプロジェクトに追加されます。supervise 関数の「子仕様」配列が空であることに注意してください。
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
アプリケーションのエントリ ポイントも作成されます。オンラインで見つけたいくつかの例を調べて、次のように書きました。
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
このアプリケーションは機能しますが、 App.start()でApp.Supervisor.start_link( )への呼び出しを削除しても機能します。
では、この場合、監督者は何のためにいるのでしょうか? スーパーバイザーの子仕様が空の場合、その意味は何ですか?
たとえば、ここにある Elixir の例 - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - スーパーバイザーを開始する呼び出しがコメントアウトされていることがわかります。 65行目。
しかし、Cowboy Erlang の公式の例では、このファイル - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - 子仕様のない同様のルート スーパーバイザを作成し、呼び出します。ここのメイン アプリケーション ファイルの 22 行目 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl