通过erl_boot_server加载Erlang远程代码无法正常工作

时间:2016-06-30 09:28:49

标签: erlang elixir

我正在测试通过-loader inet选项加载erlang远程代码而没有slave选项。

现在在同一个盒子上有两个elixir模拟器(控制台)。主人运行自定义项目:

shell> iex --sname master --cookie abc123 -S mix

master iex> :erl_boot_server.start([{127,0,0,1}])
{:ok, #PID<0.134.0>}

另一个裸奔:

工人

shell> iex --sname worker --cookie abc123 --erl "-hosts 127.0.0.1 -id worker -loader inet"

worker iex> 

自动远程代码加载可能会如何工作?当我尝试在工作者上加载模块时,我得到了:

worker iex> Code.ensure_loaded(MyModule)
{:error, :nofile}

在主人身上,这确实有效:

master iex> Code.ensure_loaded(MyModule)
{:module, MyModule}

我知道worker节点确实找到了master并连接到它的启动服务器,因为当master不存在时,我收到消息:

{erl_prim_loader,'no server found'}

我还尝试通过Code.append_path将所有代码路径添加到worker中,但是当我尝试加载模块时它仍然没有找到它。

1 个答案:

答案 0 :(得分:0)

尝试在您的主服务器上运行:

:rpc.call(:'worker', :code, :add_paths, [:code.get_path])

一旦完成,您应该能够在工作节点上自动加载您的代码。