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
Amazon ec2 Amazon Ec2实例公共IP不适用于Phoenix Elixir应用程序错误:原因:eaddrnotavail(无法分配请求的地址)_Amazon Ec2_Elixir_Phoenix Framework - Fatal编程技术网

Amazon ec2 Amazon Ec2实例公共IP不适用于Phoenix Elixir应用程序错误:原因:eaddrnotavail(无法分配请求的地址)

Amazon ec2 Amazon Ec2实例公共IP不适用于Phoenix Elixir应用程序错误:原因:eaddrnotavail(无法分配请求的地址),amazon-ec2,elixir,phoenix-framework,Amazon Ec2,Elixir,Phoenix Framework,我刚买了一个AmazonEC2实例,安装了erlang、elixir和PostgreSQL。 只要放一个基本的凤凰应用程序 当我运行mixphx时。服务器 它正在本地主机中启动 但我想在亚马逊公共IP上运行它 So I put that in config/dev.exs Http: [ip:{1, 2, 3, 4}, port:4000} 在此之后,我创建了一个安全组并允许所有流量 现在,当我使用sudo mix phx.server启动应用程序时 I am getting the

我刚买了一个AmazonEC2实例,安装了erlang、elixir和PostgreSQL。 只要放一个基本的凤凰应用程序

当我运行mixphx时。服务器 它正在本地主机中启动

但我想在亚马逊公共IP上运行它

So I put that in config/dev.exs

    Http: [ip:{1, 2, 3, 4}, port:4000}
在此之后,我创建了一个安全组并允许所有流量

现在,当我使用sudo mix phx.server启动应用程序时

I am getting the below error

Compiling 10 files (.ex)
Generated myapp_test app
[error] Failed to start Ranch listener myappTestWeb.Endpoint.HTTP in :ranch_tcp:listen([port: 4000, ip: {1, 2, 3, 4}]) for reason :eaddrnotavail (can't assign requested address)

[info] Application myapp_test exited: myappTest.Application.start(:normal, []) returned an error: shutdown: failed to start child: myappTestWeb.Endpoint
    ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Handler
        ** (EXIT) shutdown: failed to start child: {:ranch_listener_sup, myappTestWeb.Endpoint.HTTP}
            ** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup
                ** (EXIT) {:listen_error, myappTestWeb.Endpoint.HTTP, :eaddrnotavail}
[info] Application phoenix_ecto exited: :stopped
[info] Application ecto exited: :stopped
[info] Application poolboy exited: :stopped
[info] Application postgrex exited: :stopped
[info] Application decimal exited: :stopped
[info] Application db_connection exited: :stopped
[info] Application connection exited: :stopped
[info] Application cowboy exited: :stopped
[info] Application cowlib exited: :stopped
[info] Application ranch exited: :stopped
[info] Application runtime_tools exited: :stopped

=INFO REPORT==== 23-Jan-2018::10:48:23 ===
    application: logger
    exited: stopped
    type: temporary
** (Mix) Could not start application myapp_test: myappTest.Application.start(:normal, []) returned an error: shutdown: failed to start child: myappTestWeb.Endpoint
    ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Handler
        ** (EXIT) shutdown: failed to start child: {:ranch_listener_sup, myappTestWeb.Endpoint.HTTP}
            ** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup
                ** (EXIT) {:listen_error, myappTestWeb.Endpoint.HTTP, :eaddrnotavail}
当我把公共IP放在浏览器中时,它也不工作。 我是否需要安装apache或任何其他Web服务器。 或 我需要在系统的任何地方绑定amazon公共IP吗

任何关于如何解决问题的见解都将不胜感激
谢谢

在这一点上,你最好的办法是开始隔离失败的东西。一旦您能够确定哪些组件应该工作,哪些组件不工作,您将能够使您的问题更加集中。一些疑难解答的想法可以帮助您开始:

  • 你能从你的机器ping ec2公共地址吗
  • 它是否有来自ec2终端的地址(
    ip地址显示)
  • ec2机器可以ping到外部ip吗,比如谷歌的dns(
    ping8.8.8.8
  • 使用netcat查看端口是否真正打开:
    sudo nc-l 80
    (在ec2主机上)和机器上的
    nc 80
    。然后,您应该能够输入您的机器(确保在一些字符后按enter键),并看到它出现在ec2主机上
  • 从cowboy配置中删除该地址,并将其绑定到0.0.0.0(默认值),然后查看是否可以访问它
    你的第五点对我有用。非常感谢你,克里斯。