我正在努力第一次实现一个主管,我遇到了一些我无法从文档中找到的问题.具体来说,当我尝试使用SlowRamp.flood我开始我的过程{:error, {:invalid_child_spec, []}}.
这是一个非常简单的应用程序,使用mix new slow_ramp --sup.
主要文件./lib/slow_ramp.ex是:
defmodule SlowRamp do
use Application
# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more information on OTP Applications
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(SlowRamp.Flood, [])
]
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: SlowRamp.Supervisor]
Supervisor.start_link(children, opts)
end
def flood do
Supervisor.start_child(SlowRamp.Supervisor, [])
end
end
Run Code Online (Sandbox Code Playgroud)
我的子函数/文件在./lib/SlowRamp/flood.ex,看起来像这样:
defmodule SlowRamp.Flood do
def start_link do
Task.start_link(fn -> start end)
end
defp start do
receive do
{:start, host, caller} ->
send caller, System.cmd("cmd", ["opt"])
end
end
end
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感谢.谢谢!
问题出在
Supervisor.start_child(SlowRamp.Supervisor, [])
Run Code Online (Sandbox Code Playgroud)
您需要一个有效的子规范,例如:
def flood do
import Supervisor.Spec
Supervisor.start_child(SlowRamp.Supervisor, worker(SlowRamp.Flood, [], [id: :foo]))
end
Run Code Online (Sandbox Code Playgroud)
这就是它告诉子规范无效的原因
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |