【问题标题】:Migrating to DynamicSupervisor from Supervisor Elixir从 Supervisor Elixir 迁移到 DynamicSupervisor
【发布时间】: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


    【解决方案1】:

    在这一行中,

    DynamicSupervisor.init(spec, strategy: :simple_one_for_one, max_restarts: 1_000_000)
    

    strategymax_restart 应该在 app.ex children's 中定义。 该规范应在此处使用,但仅限于 start_child/1

    当我实现了一个 DynamicSupervisor 这是我的代码:

    children = [ ..., 
      {MyApp.Supervisor, strategy: :one_for:one} // MyApp.Supervisor implements DynamicSupervisor.
    ]
    

    然后在那个班级:

    def init(args) do
      DynamicSupervisor.init(arg)
    end 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2015-01-13
      • 2019-07-09
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2017-09-02
      相关资源
      最近更新 更多