Elixir:为使用mix escript.build创建的发行版设置cookie和主机名

Pra*_*mod 4 elixir

交互式运行iex时,可以使用

iex --cookie <cookie> --name <hostname>
Run Code Online (Sandbox Code Playgroud)

如何设置相同的值cookiename运行使用创建可执行文件时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应该将其存储在哪里,以便可执行文件读取它?

Dog*_*ert 5

据我所知,vm.args不是由手稿阅读的。您至少有2个选项:

  1. 设置这些值emu_args传递给关键escriptproject/0mix.exs

    def project do
      [app: :m,
       ...,
       escript: [main_module: M, emu_args: ["-name foo@bar -setcookie baz"]]]
    end
    
    Run Code Online (Sandbox Code Playgroud)
  2. 解析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)

  • http://erlang.org/doc/man/erl.html中也有env变量ERL_AFLAGS,但是没时间看能不能解决这个问题。 (2认同)