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<0.87309885/0 in SlrRecorderApiWeb.CameraController.add/2
,它指的是在模块SlrRecorderApiWeb.CameraController
中的函数add/2
中定义的arity 0 的匿名函数。 以上是关于Phoenix/Erlang 节点连接的主要内容,如果未能解决你的问题,请参考以下文章