Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 何塞·瓦利姆长生不老药的例子不';我不工作_Elixir - Fatal编程技术网

Elixir 何塞·瓦利姆长生不老药的例子不';我不工作

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

我不熟悉长生不老药和分布式编程。我在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.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

  • 如果您想在两台独立的计算机上运行节点,但只有一台计算机,您可能需要尝试Docker。打开两个终端窗口并尝试以下操作:

  • 在终端窗口#1中:

  • 在终端窗口#2中:


现在,让我们回到从一个节点到另一个节点生成一个进程上来。以下步骤将基于在上述同一台计算机上运行的示例

在终端窗口#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

  • 如果您想在两台独立的计算机上运行节点,但只有一台计算机,您可能需要尝试Docker。打开两个终端窗口并尝试以下操作:

  • 在终端窗口#1中:

  • 在终端窗口#2中:


现在,让我们回到从一个节点到另一个节点生成一个进程上来。以下步骤将基于在上述同一台计算机上运行的示例

在终端窗口#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>