我是全新的灵丹妙药,当一个构建决定不构建时,我很难找到问题。
我遇到的问题之一是,我不断地遇到这样的问题:
** (Mix) Could not start application reph: Reph.start(:normal, []) returned an error: shutdown: failed to start child: Reph.ReactIO
** (EXIT) an exception was raised:
** (ArgumentError) expected :name option to be one of:
* nil
* atom
* {:global, term}
* {:via, module, term}
Got: {:local, Reph.ReactIO}
(elixir) lib/supervisor.ex:332: Supervisor.start_link/3
(stdlib) supervisor.erl:365: :supervisor.do_start_child/2
(stdlib) supervisor.erl:348: :supervisor.start_children/3
(stdlib) supervisor.erl:314: :supervisor.init_children/2
(stdlib) gen_server.erl:328: :gen_server.init_it/6
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3所以我对灵丹妙药代码库做了一些调查,看看这个论点是什么。在我看来,StdJsonIo仍然应该使用
{atom, opts} when is_atom(atom) ->
:gen.start(:gen_server, link, {:local, atom}, module, args, opts)当我传递原子时,主管程序中的代码片段:local,后面跟着Module。下面是它将要挂起的代码片段。
def start_link(opts \\ []) do
Supervisor.start_link(__MODULE__, :ok, name: {:local, __MODULE__})
end如果我删除了:local,它似乎有效,但是我有两个问题,一个是代码似乎与另一个问题完全错误,另一个是。现在,我有一个依赖项,我不能只使用deps.get并运行它,我必须单独添加它,这可能是可以的。但我真的很想知道为什么这会破坏应用程序。
发布于 2017-02-23 07:44:49
正如您在源代码中所看到的,Supervisor.start_link/3期望选项值是描述性错误消息中的选项值之一。
也就是说,name选项不能有一个值{:local, __MODULE__}。您可以使用name: __MODULE__,这在很多情况下是足够的,或者您可以在那里传递任何atom,而不是__MODULE__ (__MODULE__被编译到当前编译模块名)。
您所指的“药物代码库”是一个方法do_start,它显然不是您所调用的方法。无论您是否希望调用do_start,都可以使用GenServer.start/3启动GenServer,这是为了在监控树之外启动服务器。
https://stackoverflow.com/questions/42407310
复制相似问题