我是Elixir的新手,但它有很多乐趣!
我来自Ruby世界,所以开始看起来比喻.并且存在调试工具pry
.使用binding.pry
我可以中断任何会话.我在Elixir找到了类似的东西 - IEx.pry
.但是当我通过测试时,它不起作用ExUnit
.
问题 - 是否可以中断测试会话并使用当前环境运行iex?
我想使用Registry
模块来注册动态创建的子进程。所以我将注册表添加到我的主管树中:
def init([]) do
children = [
supervisor(Registry, [:unique, :my_registry]),
supervisor(MyManager, []),
# ...
]
opts = [strategy: :one_for_one, name: MySupervisor]
supervise(children, opts)
end
Run Code Online (Sandbox Code Playgroud)
孩子的注册是这样发生的:
def start_link(%{id: id}) do
GenServer.start_link(__MODULE__, [], name: {:via, Registry, {:my_registry, id}})
end
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是 – 如何在我的注册表中获取所有键(子 pid)。我尝试使用Registry.keys\2
,但没有成功。
def get_registry_pid do
Supervisor.which_children(MySupervisor)
|> Enum.filter(fn {id, _, _, _} -> id == Registry end)
|> List.first
|> elem(1) # get a Regisry pid from a tuple {id, pid, type, modules}
end
Registry.keys(:my_registry, get_registry_pid()) # …
Run Code Online (Sandbox Code Playgroud)