我正在测试通过-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中,但是当我尝试加载模块时它仍然没有找到它。
答案 0 :(得分:0)
尝试在您的主服务器上运行:
:rpc.call(:'worker', :code, :add_paths, [:code.get_path])
一旦完成,您应该能够在工作节点上自动加载您的代码。