【问题标题】:Elixir Supervisors: invalid_child_specElixir 主管:invalid_child_spec
【发布时间】:2017-03-12 12:55:23
【问题描述】:

elixir 新手,我正在关注 José Valim 的帖子https://howistart.org/posts/elixir/1

当我收到错误时,我无法让主管启动孩子:

iex(1)> Portal.shoot(:orange) {:error, {:invalid_child_spec, [:orange]}}

我们将不胜感激!

这是门户模块

defmodule Portal do
use Application

def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
        worker(Portal.Door, [])
    ]

    opts = [strategy: :simple_one_for_one, name: Portal.Supervisor]
    Supervisor.start_link(children, opts)
end

@doc """
Shoots a new door with the given `color`
"""
def shoot(color) do
    Supervisor.start_child(Portal.Supervisor, [color])
end

这里是 Portal.Door 模块和应该被调用的 start_link 函数

defmodule Portal.Door do

def start_link(color) do
    Agent.start_link(fn -> [] end, name: color)
end

【问题讨论】:

  • 您的代码对我有用。您确定这是显示该错误的确切代码吗?
  • 是的。这是我的编辑器直接复制粘贴的。我在文件中确实有其他函数(也来自教程),但它们不应该有任何影响,因为它们没有被调用。 @Dogbert 查看整个 .ex 文件会有所帮助吗
  • 是的。你能先复制问题中的代码,添加2个缺失的end,看看它是否有效?我复制了这个并添加了 2 个缺失的 end,昨天它对我有用。

标签: elixir


【解决方案1】:

我在该教程中遇到了同样的问题。如果您使用的是 1.4 之前的 Mix 版本,本教程是正确的。但是,在 Mix 1.4+ 中,主管代码应该放在 lib/portal/application.ex 中的 Portal.Application 模块中。这是此更改的 Github 拉取请求,并围绕更改背后的想法进行了一些讨论:https://github.com/elixir-lang/elixir/pull/5275

要解决此问题,您需要删除添加到 Portal 模块的应用程序代码,并将其添加到 lib/portal/application.ex 中的 Portal.Application 模块。您的 Portal.Application 模块应如下所示:

defmodule Portal.Application do
  @moduledoc false

  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      worker(Portal.Door, [])
    ]

    opts = [strategy: :simple_one_for_one, name: Portal.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

【讨论】:

    【解决方案2】:

    也许你的混音版本是1.4。将1.4--sup 混合,自动在单个应用程序模块中包含 start/2 实现。在您的场景中,即lib/portal/application.ex。您可以在那里修改启动功能。 The official release notes

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2016-06-24
      • 2016-01-23
      • 2016-04-20
      • 2021-05-03
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      相关资源
      最近更新 更多