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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With