【发布时间】:2020-01-30 20:38:09
【问题描述】:
我正在尝试从 Supervisor 升级到 DynamicSupervisor。
我有这个简单的主管,
use Supervisor
alias EvercamMedia.Snapshot.Worker
def start_link() do
Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
children = [worker(Worker, [], restart: :permanent)]
supervise(children, strategy: :simple_one_for_one, max_restarts: 1_000_000)
end
def start_child(settings) do
Supervisor.start_child(__MODULE__, [settings])
end
我把它变成了这个
use DynamicSupervisor
alias EvercamMedia.Snapshot.Worker
def start_link() do
DynamicSupervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
spec = %{id: Worker, start: {Worker, :start_link, []}}
DynamicSupervisor.init(spec, strategy: :simple_one_for_one, max_restarts: 1_000_000)
end
def start_child(settings) do
DynamicSupervisor.start_child(__MODULE__, [settings])
end
但它给了我一个错误
** (UndefinedFunctionError) function DynamicSupervisor.init/2 is undefined or private
(elixir 1.10.0) DynamicSupervisor.init(%{id: EvercamMedia.Snapshot.Worker, start: {EvercamMedia.Snapshot.Worker, :start_link, []}}, [strategy: :simple_one_for_one, max_restarts: 1000000])
(elixir 1.10.0) lib/dynamic_supervisor.ex:541: DynamicSupervisor.init/1
任何帮助将不胜感激,关于这个问题,另外,我想知道上面的 Supervisor 实现是否有意义?在初始化中只有一个ok?
【问题讨论】:
标签: elixir