Я изучаю Erlang/OTP, и в главе 14 говорится:
«Вы можете загрузить модуль на все узлы, используя команду оболочки:
command nl(Mod)
».
Я хочу знать, как это сделать? Я не могу найти команду оболочки: command nl(Mod)
.
Я изучаю Erlang/OTP, и в главе 14 говорится:
«Вы можете загрузить модуль на все узлы, используя команду оболочки:
command nl(Mod)
».
Я хочу знать, как это сделать? Я не могу найти команду оболочки: command nl(Mod)
.
Вы пытались набрать help().
в оболочке? Эта функция определена в модуле c. в стандартной библиотеке. Но шелл поймет nl(Mod).
Для выполнения теста запустите как минимум две виртуальные машины erlang и подключите их:
erl -pa your_module_path -name [email protected]
erl -name [email protected]
в первой оболочке подключитесь ко второму узлу:
net_kernel:connect('[email protected]').
должен ответить true
.
В your_module_path
создайте простой модуль, например:
-module(nl_test).
-export([test/0]).
test() -> 1.
и скомпилировать его с помощью c(nl_test).
Теперь вы можете запустить nl_test:test()
из первой оболочки, но вторая не может ее загрузить. Чтобы транслировать его и принудительно загрузить, просто запустите из первого nl(nl_test).
Теперь попробуйте из второго шелла nl_test:test()
.
Допустим, вы изменили test() -> 1.
на test() -> 2.
, и все, что вам нужно сделать, это просто запустить c(nl_test), nl(nl_test).
или короче nc(nl_test)
, что означает то же самое.
nl_test:test().
на всех ваших подключенных узлах должно возвращать 2
.
Это может показаться очень простым, но в сложных производственных системах правильная горячая загрузка является довольно сложной проблемой.