首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用产卵/4?

如何使用产卵/4?
EN

Stack Overflow用户
提问于 2019-05-07 20:46:54
回答 1查看 393关注 0票数 0

我试图使用Node.spawn/4在远程的Elixir节点上部署一个函数,但我似乎无法管理它。

我在iex中的一个模块Hello中定义了所讨论的函数(hello ),并尝试使用Node.spawn(:node2@remote, Hello, :world, [])部署它。

代码语言:javascript
复制
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, [], []}]}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 04:29:42

你使用的术语让你很难理解你尝试过什么。

正如:erlang.spawn/4文档所述,除了在远程节点上执行代码外,该函数在所有方面都与:erlang.spawn/3完全一样工作。无论这意味着什么,都不涉及部署。远程节点必须为调用方所知,并且必须包含要执行的代码。

有一个很好的教程可在灵丹妙药-lang.org- Distributed tasks and configuration

要检查远程节点是否对调用方可见,可以调用Node.connect/1

总结一下。

从两个不同的终端启动两个命名的iex会话:

代码语言:javascript
复制
$ iex --sname foo
$ iex --sname bar

从第一次尝试:

代码语言:javascript
复制
Node.spawn(:bar@localhost, IO, :puts, ["¡YAY!"])

你应该看到"¡YAY!"打印出来了。要测试您自己的Hello.world/0,目标节点必须知道此函数。因此,切换到:foo@localhost实例并键入:

代码语言:javascript
复制
defmodule Hello, do: def world, do: IO.puts("¡YAY!")

现在切换到:bar@localhost并执行以下操作:

代码语言:javascript
复制
Node.spawn(:foo@localhost, Hello, :world, [])

你应该看到"¡YAY!"打印出来了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56030258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档