Concurrency Phoenix/Erlang节点连接

Concurrency Phoenix/Erlang节点连接,concurrency,erlang,elixir,phoenix-framework,distributed-computing,Concurrency,Erlang,Elixir,Phoenix Framework,Distributed Computing,我在一台机器上启动了一个Elixir Phoenix节点,在另一台机器上启动了一个Erlang节点。Erlang节点有一个名为“rec”的进程,它接受三个元素的元组:一个原子和两个字符表。在Elixir节点上运行此代码时: Node.spawn_link(node_name, fn -> send(:rec, {:create, uuid, link}) end) 它会根据需要运行,但当我从Phoenix控制器运行它时,它会返回如下错误: [error] Error in process

我在一台机器上启动了一个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>, [], []}]}
[error]进程中出错#节点上的PID:“node1@192.168.0.137“具有退出值:
{:未定义,[{函数,[],[]}

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

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

好消息是,您不需要在此处使用函数,只需使用:

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

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

当您发送要在另一个节点上运行的
fn
函数时,定义该函数的模块必须在两个节点上加载。-如何在模块中定义匿名函数?@7stud匿名函数被认为是在其代码出现的模块中“定义”的。事实上,VM甚至记录了匿名函数是在哪个函数中定义的。在错误消息中,我们可以看到
#函数