Elixir 何塞·瓦利姆长生不老药的例子不';我不工作
我不熟悉长生不老药和分布式编程。我在Youtube上的Jose Valim示例中尝试了从其他节点派生方法的示例。但它不起作用,也找不到正确的答案Elixir 何塞·瓦利姆长生不老药的例子不';我不工作,elixir,Elixir,我不熟悉长生不老药和分布式编程。我在Youtube上的Jose Valim示例中尝试了从其他节点派生方法的示例。但它不起作用,也找不到正确的答案 iex(bob@local)2> Node.spawn(:"alice@alice.local", fn -> Hello.world() end) #PID<0.116.0> 22:05:12.657 [warn] ** Can not start :erlang::apply,[#Function<20.12862
iex(bob@local)2> Node.spawn(:"alice@alice.local", fn -> Hello.world() end)
#PID<0.116.0>
22:05:12.657 [warn] ** Can not start :erlang::apply,[#Function<20.128620087/0 in :erl_eval.expr/5>, []] on :"alice@alice.local" **
iex(bob@local)2> Node.spawn(:“alice@alice.local“,fn->Hello.world()结束)
#PID
22:05:12.657[警告]**无法启动:erlang::apply,[#函数,[]on::alice@alice.local" **
我尝试了所有的建议。帕努托说这都是关于知识产权的。我也尝试Node.connect这个东西。但我还是不能解决它。我错过了什么?有两种情况:
- 要连接在同一台计算机上运行的两个Elixir节点,请打开两个终端窗口并尝试以下操作:
- 在终端窗口#1中:
- 在终端窗口#2中: 这里
eugene mbp
是我的计算机的主机名,没有域部分。对于域部分,它看起来像这样eugene mbp.local
现在,让我们回到从一个节点到另一个节点生成一个进程上来。以下步骤将基于在上述同一台计算机上运行的示例 在终端窗口#1中运行以下命令:
iex(alice@eugene-mbp)1> Node.list()
[]
iex(alice@eugene-mbp)2> Node.ping(:"bob@eugene-mbp")
:pong
iex(alice@eugene-mbp)3> Node.list()
[:"bob@eugene-mbp"]
在上面的命令序列中,我们首先看到节点是否相互了解,事实上它们并不了解。然后我们ping一个“bob”节点。然后,我们再次检查节点是否相互认识,现在它们确实认识了
现在,让我们在“bob”节点上定义一个模块。打开端子2,并写下:
iex(bob@eugene-mbp)1> defmodule Hello do
...(bob@eugene-mbp)1> def world do
...(bob@eugene-mbp)1> IO.puts "Hello, world!"
...(bob@eugene-mbp)1> end
...(bob@eugene-mbp)1> end
{:module, Hello,
<<70, 79, 82, 49, 0, 0, 4, 40, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 140,
0, 0, 0, 15, 12, 69, 108, 105, 120, 105, 114, 46, 72, 101, 108, 108, 111, 8,
95, 95, 105, 110, 102, 111, 95, 95, 7, ...>>, {:world, 0}}
iex(bob@eugene-mbp)1>定义模块Hello do
...(bob@eugene-mbp)1>def world do
...(bob@eugene-mbp)1>IO.puts“你好,世界!”
...(bob@eugene-mbp)1>结束
...(bob@eugene-mbp)1>结束
{模块,您好,
,{:world,0}
最后,让我们调用刚刚在“alice”节点中定义的函数。打开终端1并运行它。以下是完整的输出:
iex(alice@eugene-mbp)4> Node.spawn(:"bob@eugene-mbp", fn -> Hello.world() end)
Hello, world!
#PID<10894.142.0>
iex(alice@eugene-mbp)5>
iex(alice@eugene-mbp)4>节点。生成(:“bob@eugene-mbp“,fn->Hello.world()结束)
你好,世界!
#PID
iex(alice@eugene-mbp)5>
有两种情况:
- 要连接在同一台计算机上运行的两个Elixir节点,请打开两个终端窗口并尝试以下操作:
- 在终端窗口#1中:
- 在终端窗口#2中: 这里
eugene mbp
是我的计算机的主机名,没有域部分。对于域部分,它看起来像这样eugene mbp.local
现在,让我们回到从一个节点到另一个节点生成一个进程上来。以下步骤将基于在上述同一台计算机上运行的示例 在终端窗口#1中运行以下命令:
iex(alice@eugene-mbp)1> Node.list()
[]
iex(alice@eugene-mbp)2> Node.ping(:"bob@eugene-mbp")
:pong
iex(alice@eugene-mbp)3> Node.list()
[:"bob@eugene-mbp"]
在上面的命令序列中,我们首先看到节点是否相互了解,事实上它们并不了解。然后我们ping一个“bob”节点。然后,我们再次检查节点是否相互认识,现在它们确实认识了
现在,让我们在“bob”节点上定义一个模块。打开端子2,并写下:
iex(bob@eugene-mbp)1> defmodule Hello do
...(bob@eugene-mbp)1> def world do
...(bob@eugene-mbp)1> IO.puts "Hello, world!"
...(bob@eugene-mbp)1> end
...(bob@eugene-mbp)1> end
{:module, Hello,
<<70, 79, 82, 49, 0, 0, 4, 40, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 140,
0, 0, 0, 15, 12, 69, 108, 105, 120, 105, 114, 46, 72, 101, 108, 108, 111, 8,
95, 95, 105, 110, 102, 111, 95, 95, 7, ...>>, {:world, 0}}
iex(bob@eugene-mbp)1>定义模块Hello do
...(bob@eugene-mbp)1>def world do
...(bob@eugene-mbp)1>IO.puts“你好,世界!”
...(bob@eugene-mbp)1>结束
...(bob@eugene-mbp)1>结束
{模块,您好,
,{:world,0}
最后,让我们调用刚刚在“alice”节点中定义的函数。打开终端1并运行它。以下是完整的输出:
iex(alice@eugene-mbp)4> Node.spawn(:"bob@eugene-mbp", fn -> Hello.world() end)
Hello, world!
#PID<10894.142.0>
iex(alice@eugene-mbp)5>
iex(alice@eugene-mbp)4>节点。生成(:“bob@eugene-mbp“,fn->Hello.world()结束)
你好,世界!
#PID
iex(alice@eugene-mbp)5>
您是否有一台名为alice.local的机器运行?:)请看我在这里给出的示例:首先,当我试图完全按照教程进行操作时,-name alice而不是local,它抛出一个“need long name error”。然后我尝试用本地创建节点,它成功了。~$iex—名称alice@local--cookie“secret”Erlang/OTP 21[erts-10.1.3][source][64位][smp:4:4][ds:4:4:10][async threads:1][hipe]也尝试了您的建议Gavin,Node.connect::node@machinename2还抛出一个“假”iex(alice@local)3> Node.connect:“bob@bob.local“您是否有一台名为alice.local
?:)的机器在运行?”请看我在这里给出的示例:首先,当我试图完全按照教程进行操作时,-name alice而不是local,它抛出一个“need long name error”。然后我尝试用本地创建节点,它成功了。~$iex—名称alice@local--cookie“secret”Erlang/OTP 21[erts-10.1.3][source][64位][smp:4:4][ds:4:4:10][async threads:1][hipe]也尝试了您的建议Gavin,Node.connect::node@machinename2还抛出一个“假”iex(alice@local)3> Node.connect:“bob@bob.local“谢谢你,格米尔,彻底解决了这个问题。我遵循它,它的工作是完美的。这一切都是关于使用正确的主机名/节点。感谢gmile提供的彻底解决方案。我遵循它,它的工作是完美的。这一切都与使用正确的主机名/节点有关。
iex(alice@eugene-mbp)4> Node.spawn(:"bob@eugene-mbp", fn -> Hello.world() end)
Hello, world!
#PID<10894.142.0>
iex(alice@eugene-mbp)5>