Phoenix/Erlang 节点连接

Posted

技术标签:

【中文标题】Phoenix/Erlang 节点连接【英文标题】:Phoenix/Erlang node connection 【发布时间】:2019-07-19 18:44:18 【问题描述】:

我在一台机器上启动了 Elixir Phoenix 节点,在另一台机器上启动了 Erlang 节点。 Erlang 节点有一个名为“rec”的进程,它接受三个元素的元组:一个原子和两个字符列表。当我在 Elixir 节点上运行此代码时:

Node.spawn_link(node_name, fn -> send(:rec, :create, uuid, link) end)

它根据需要运行,但是当我从 Phoenix 控制器运行它时,它返回如下错误:

[error] Error in process #PID<14185.2561.0> on node :"node1@192.168.0.137" with exit value:
:undef, [#Function<0.87309885/0 in SlrRecorderApiWeb.CameraController.add/2>, [], []]

我应该怎么做才能正确运行它?

【问题讨论】:

【参考方案1】:

发生这种情况是因为模块 SlrRecorderApiWeb.CameraController 未加载到相关 Erlang 节点上:当您发送 fn 函数以在另一个节点上运行时,定义它的模块必须在两个节点上加载.

好消息是你不需要在这里使用函数,你可以使用:

send(:rec, node_name, :create, uuid, link)

消息将被发送到另一个节点上名为rec的进程。

【讨论】:

当您发送fn 函数以在另一个节点上运行时,定义它的模块必须在两个节点上加载。 -- 如何才能匿名函数在模块中定义? @7stud 匿名函数被认为是在其代码出现的模块中“定义”的。事实上,VM 甚至记录了匿名函数是在哪个命名函数中定义的。在错误消息中我们看到#Function&lt;0.87309885/0 in SlrRecorderApiWeb.CameraController.add/2,它指的是在模块SlrRecorderApiWeb.CameraController 中的函数add/2 中定义的arity 0 的匿名函数。

以上是关于Phoenix/Erlang 节点连接的主要内容,如果未能解决你的问题,请参考以下文章

HBase集成phoniex

浅谈Phoenix在HBase中的应用

确定层次结构中的两个节点是不是已连接

如何在neo4j中获取所有连接的节点

多节点 cassandra 集群:连接错误:('无法连接到任何服务器')

[Elixir002]节点启动后自动连接其它节点