Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elixir Plug Cowboy not using port 80

Tags:

elixir

cowboy

I have a Router plug

defmodule Rest do
  use Plug.Router
  import Plug.Conn

  plug :match
  plug :dispatch

  get "/hello" do
    send_resp(conn, 200, "Hello, world!")
  end

  match _ do
    send_resp(conn, 404, "oops")
  end

  def start do
    Plug.Adapters.Cowboy.http Rest, [], port: 80
  end

  def stop do
    Plug.Adapters.Cowboy.shutdown Rest.HTTP
  end
end

However, when calling Rest.start I get

{:error,
 {{:shutdown,
   {:failed_to_start_child, :ranch_acceptors_sup,
    {{:badmatch, {:error, :eacces}},
     [{:ranch_acceptors_sup, :init, 1,
       [file: 'src/ranch_acceptors_sup.erl', line: 30]},
      {:supervisor, :init, 1, [file: 'supervisor.erl', line: 243]},
      {:gen_server, :init_it, 6, [file: 'gen_server.erl', line: 306]},
      {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 239]}]}}},
  {:child, :undefined, {:ranch_listener_sup, Rest.HTTP},
   {:ranch_listener_sup, :start_link,
    [Rest.HTTP, 100, :ranch_tcp, [port: 200], :cowboy_protocol,
     [env: [dispatch: [{:_, [],
         [{:_, [], Plug.Adapters.Cowboy.Handler, {Rest, []}}]}]],
      compress: false]]}, :permanent, :infinity, :supervisor,
   [:ranch_listener_sup]}}}

If I remove the port: 80, there is no problem calling Rest.start, and the server listens on port 4000.

I am using Elixir v0.15.0.

like image 241
lthreed Avatar asked Oct 01 '22 04:10

lthreed


1 Answers

Port 80 needs special permissions on most systems before you can bind to it. Does the user you are running this with have those permissions? Try running under sudo. -Uri Agassi

This was the issue.

like image 105
lthreed Avatar answered Oct 04 '22 20:10

lthreed