6

我们在应用程序中使用 Erlang 和slave模块,该应用程序在不同机器上生成从节点,这些从节点向另一台机器上的主节点报告并由其协调。从节点在它们的机器上打开端口并运行一些外部程序(本质上,erlang 从节点(我们称之为工人)只是外部程序的精美包装器)。

但是,我们遇到了一些意想不到的问题,我们还没有找到好的解决方案。

  1. 代码分发。目前,我们的 Makefile 将编译后的 erlang 代码(文件夹)同步到运行工作节点的机器,我们通过工作节点启动ebin时的参数加载它。-pa确实应该有某种方法可以在运行时通过 Erlang 自动分发代码,但我们不知道该怎么做。

  2. 记录。从模块文档说“从站产生的所有 TTY 输出都将发送回主节点”。但是,当我们lager在从属(工作)节点上运行(basho 记录器)时,它的输出不会重定向到主节点的 tty(只有主节点的日志输出)。目前我们有一个在主节点上运行的进程,它记录(通过较大的)它从从节点获得的消息。所以要在从节点上记录一些东西,我们向主节点发送消息。

我们正在像这样启动工作节点:

slave:start(IP, NodeName, NodeArgs)

NodeArgs在哪里

 -setcookie thecookie -pa /home/dau/mapro/deps/nicedecimal/ebin/ /home/dau/mapro/deps/meck/ebin/ /home/dau/mapro/deps/lager/ebin/ /home/dau/mapro/deps/jsx/ebin/ /home/dau/mapro/apps/worker/ebin/ /home/dau/mapro/ebin/ -s worker_app

其中所有给定路径都是运行工作节点的机器上的绝对路径。

4

1 回答 1

2

就第 1 项而言,您正在做正确的事情:您负责在远程主机上安装 Erlang 源模块或预编译的梁文件,就像您负责安装 OTP/Erlang 本身一样。一旦它们位于远程机器上的代码路径中,您就可以加载、卸载和热交换到您心中的内容,不过:)

wrt item #2:您是否验证过您的从模块代码可以erlang:display()向您的主节点输出天真的错误消息(即)?在这种情况下,问题是更大的配置 - 尝试设置error_logger_redirectfalse快速测试,也许......如果这些都没有用,请提前道歉!

于 2012-11-08T22:06:45.553 回答