According to the guide for version 1.4 it should be like this:
[
# other children ...
supervisor(MyAppWeb.Endpoint, []), # this line should already exist
supervisor(Absinthe.Subscription, [MyAppWeb.Endpoint]), # add this line
# other children ...
]
On the master branch they’ve added the child_spec approach but note that the guide doesn’t include it. I’d try something like
[
# Start the Ecto repository
MyAppWeb.Repo,
# Start the endpoint when the application starts
MyAppWeb.Endpoint,
{Absinthe.Subscription, [MyAppWeb.Endpoint]} # <-- note this is different from the guide
]
since in v1.4child_spec expects a list, not a single module atom.
Actually, the supervisor(...) calls are for 1.3 from what I understand, because in 1.4 the direct call to supervisor() has been supplanted by doing Supervisor.start_link(...).
So on the page I linked above (from absinthe-graphql’s github repo), it says to add it like so: {Absinthe.Subscription, PbWeb.Endpoint} to the children list. Doing this results in the problem I reported above.
However, doing what you suggest fixes the issue! So in case this may help others, here is what the relevant part of my application.ex looks like:
# List all child processes to be supervised
children = [
# Start the Ecto repository
Pb.Repo,
# Start the endpoint when the application starts
PbWeb.Endpoint,
# Starts a worker by calling: Pb.Worker.start_link(arg)
# {Pb.Worker, arg},
{Absinthe.Subscription, [PbWeb.Endpoint]}
]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: Pb.Supervisor]
Supervisor.start_link(children, opts)
end