产卵远程进程的w / o公用文件系统
-
20-09-2019 - |
题
(nodeA@foo.hyd.com)8> spawn(nodeA@bar.del.com, tut, test, [hello, 5]).
欲产卵上bar.del.com一种方法,其具有foo.hyd.com没有文件系统访问(从我在哪里产卵的处理),在运行模块“啧”的子程序“测试”。
有没有办法做到这一点,W / O提供nodeA@bar.del.com与编撰的“啧啧”模块文件?
解决方案
可以使用下面的函数来加载在远程节点的模块,而不提供该文件本身:
load_module(Node, Module) ->
{_Module, Bin, Filename} = code:get_object_code(Module),
rpc:call(Node, code, load_binary, [Module, Filename, Bin]).
如图code:load_binary/3
Filename
参数指出只用来跟踪的路径模块和文件它指向不使用本地node_server。
其他提示
我解释你的问题,以不从你的文件系统复制* .beams到远程文件系统的愿望。
如果你只是测试的东西,你可以使用在ERL外壳nl(Mod)
调用来加载模块上的所有(当前)已知节点。即,那些在nodes()
显示出来。
这将在发送的代码和从所述存储器复制加载它,它不会将其存储在远程文件系统。
您也可以使用slave
模块启动远程节点。一个从设备访问其主人的文件系统和代码服务器。那么普通的自动装载将确保在当你打电话给你test:tut/2
函数从存在的模块。
可以本地代码发送到远程节点:
> {Mod, Bin, File} = code:get_object_code(Module).
> rpc:call(RemoteNode, code, load_binary, [Mod, File, Bin]).
不隶属于 StackOverflow