我试图使用Node.spawn/4在远程的Elixir节点上部署一个函数,但我似乎无法管理它。
我在iex中的一个模块Hello中定义了所讨论的函数(hello ),并尝试使用Node.spawn(:node2@remote, Hello, :world, [])部署它。
iex(node1@local) defmodule Hello do
...(node1@local) def world, do: IO.puts("Hello World)
...(node1@local) end
Node.spawn(:node2@remote, Hello, :world, [])我希望spawn/4将模块Hello发送到远程节点,以便在尝试生成函数world/0时识别它。但是,我得到以下错误:
节点上进程#PID<16431.208.0>中的错误:node2@remote和退出值:
{:undef, [{Hello, :world, [], []}]}
发布于 2019-05-08 04:29:42
你使用的术语让你很难理解你尝试过什么。
正如:erlang.spawn/4文档所述,除了在远程节点上执行代码外,该函数在所有方面都与:erlang.spawn/3完全一样工作。无论这意味着什么,都不涉及部署。远程节点必须为调用方所知,并且必须包含要执行的代码。
有一个很好的教程可在灵丹妙药-lang.org- Distributed tasks and configuration。
要检查远程节点是否对调用方可见,可以调用Node.connect/1。
总结一下。
从两个不同的终端启动两个命名的iex会话:
$ iex --sname foo
$ iex --sname bar从第一次尝试:
Node.spawn(:bar@localhost, IO, :puts, ["¡YAY!"])你应该看到"¡YAY!"打印出来了。要测试您自己的Hello.world/0,目标节点必须知道此函数。因此,切换到:foo@localhost实例并键入:
defmodule Hello, do: def world, do: IO.puts("¡YAY!")现在切换到:bar@localhost并执行以下操作:
Node.spawn(:foo@localhost, Hello, :world, [])你应该看到"¡YAY!"打印出来了。
https://stackoverflow.com/questions/56030258
复制相似问题