2016-12-21 33 views
3

当IEX交互方式运行设置的cookie和主机名发布,运行一个可执行文件创建的使用mix escript.build时可以使用药剂:采用混合创建escript.build

iex --cookie <cookie> --name <hostname> 

如何设置相同的值cookiename

我想通了,我需要创建一个vm.args文件包含以下内容

## Name of the node 
-name [email protected] 

## Cookie for distributed erlang 
-setcookie cookie 

所以我在同一个目录下的可执行文件创建一个vm.args文件。但是当我打印Node.self()时,我收到了:[email protected]

那么我在哪里存储vm.args,以便它被可执行文件读取?

回答

3

据我所知,vm.args不是由escripts读取。你已经(至少)2种选择:

  1. mix.exs坐落在project/0传递给escriptemu_args键这些值:

    def project do 
        [app: :m, 
        ..., 
        escript: [main_module: M, emu_args: ["-name [email protected] -setcookie baz"]]] 
    end 
    
  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 
    
    $ mix escript.build 
    $ ./m [email protected] baz 
    {:[email protected], :baz} 
    
+1

http://erlang.org/doc/man/erl.html中还有env变量ERL_AFLAGS,但我没有时间去查看它是否可以解决这个问题。 –

+0

@FredtheMagicWonderDog工作!你想发表一个答案吗?这是一个更好的解决方案,因为您不必更改任何代码。 – Dogbert

+0

继续,你做了努力验证它实际上工作。 –