交互式运行iex时,可以使用
iex --cookie <cookie> --name <hostname>
Run Code Online (Sandbox Code Playgroud)
如何设置相同的值cookie和name运行使用创建可执行文件时mix escript.build?
我发现我需要创建一个vm.args包含以下内容的文件
## Name of the node
-name name@host
## Cookie for distributed erlang
-setcookie cookie
Run Code Online (Sandbox Code Playgroud)
因此,我在vm.args与可执行文件相同的目录中创建了一个文件。但是当我打印时Node.self(),我得到了:nonode@nohost。
那么我vm.args应该将其存储在哪里,以便可执行文件读取它?
据我所知,vm.args不是由手稿阅读的。您至少有2个选项:
设置这些值emu_args传递给关键escript在project/0在mix.exs:
def project do
[app: :m,
...,
escript: [main_module: M, emu_args: ["-name foo@bar -setcookie baz"]]]
end
Run Code Online (Sandbox Code Playgroud)解析CLI参数并在main函数中设置值:
defmodule M do
def main([name, cookie]) do
Node.start String.to_atom(name)
Node.set_cookie String.to_atom(cookie)
IO.inspect {Node.self, Node.get_cookie}
end
end
Run Code Online (Sandbox Code Playgroud)
$ mix escript.build
$ ./m foo@bar baz
{:foo@bar, :baz}
Run Code Online (Sandbox Code Playgroud)