【发布时间】:2015-01-13 20:15:45
【问题描述】:
我有一个混合项目,其中包含尽可能简单的 Supervisor 和 GenServer。当我从 iex 打电话时:
EchoCmd.Supervisor.start_link([:Hello])
GenServer.call(:echoserver, :echo)
GenServer.call(:echoserver, :mumble)
GenServer.call(:echoserver, :echo)
:mumble 调用引发异常,然后 GenServer 重新启动,第二个 :echo 调用正常。
如果我以任何其他方式运行代码,Supervisor 将无法重新启动 GenServer。例如,我用主模块创建项目的 escript 如下:
defmodule EchoCmd.Echo do
def main(args) do
EchoCmd.Supervisor.start_link([:Hello])
GenServer.call(:echoserver, :echo)
GenServer.call(:echoserver, :mumble)
GenServer.call(:echoserver, :echo)
end
end
:mumble 调用引发异常,并且 escript 终止,而 Supervisor 没有重新启动 GenServer。
我没有包含 Supervisor 和 Server 模块代码,因为从 iex 调用它们时它们工作正常,所以我猜这里不需要它们。
我有概念上的误解吗?这是不可能的,还是我做错了什么?
【问题讨论】:
标签: erlang-otp elixir erlang-supervisor gen-server elixir-mix