在节点集群上运行Phoenix项目

时间:2017-03-02 11:40:05

标签: elixir phoenix-framework

我尝试在一台机器上的两个节点上运行我的应用程序: https://dockyard.com/blog/2016/01/28/running-elixir-and-phoenix-projects-on-a-cluster-of-nodes

我创建了配置文件:

[{kernel,
  [
    {sync_nodes_optional, ['n1@127.0.0.1', 'n2@127.0.0.1']},
    {sync_nodes_timeout, 10000}
  ]}
].

我跑(从终端1):

 elixir --name n1@127.0.0.1 --erl "-config sys.config" -S mix phoenix.server

然后(从终端2):

elixir --name n2@127.0.0.1 --erl "-config sys.config" -S mix phoenix.server

我收到了:

** (Mix) Could not start application app: App.start(:normal, []) returned an error: shutdown: failed to start child: App.Endpoint
 ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Server
  ** (EXIT) shutdown: failed to start child: {:ranch_listener_sup, App.Endpoint.HTTP}
   ** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup
    ** (EXIT) {:listen_error, App.Endpoint.HTTP, :eaddrinuse}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您收到此错误的原因是您尝试对同一台计算机上运行的两个节点使用相同的端口(默认为4000)。

尝试做:

PORT=4001 elixir --name n2@127.0.0.1 --erl "-config sys.config" -S mix phoenix.server

您需要更改dev.exs以支持将环境变量用作端口:

config :my_app, MyApp.Endpoint,
  http: [port: String.to_integer(System.get_env("PORT") || "4000")],