malte

malte

I’m trying to use subscriptions in Absinthe, but keep getting this error when I try to start the server:

** (Mix) Could not start application pb: exited in: Pb.Application.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (FunctionClauseError) no function clause matching in Absinthe.Subscription.child_spec/1
            (absinthe) lib/absinthe/subscription.ex:43: Absinthe.Subscription.child_spec(PbWeb.Endpoint)
            (elixir) lib/supervisor.ex:624: Supervisor.init_child/1
            (elixir) lib/enum.ex:1336: Enum."-map/2-lists^map/1-0-"/2
            (elixir) lib/enum.ex:1336: Enum."-map/2-lists^map/1-0-"/2
            (elixir) lib/supervisor.ex:615: Supervisor.init/2
            (elixir) lib/supervisor.ex:564: Supervisor.start_link/2
            (kernel) application_master.erl:277: :application_master.start_it_old/4

This is in a completely vanilla app, freshly created using:

mix phx.new pb --no-html
cd pb
mix ecto.create

Then following the directions here: absinthe/guides/subscriptions.md at main · absinthe-graphql/absinthe · GitHub

I’m following the directions for 1.4.x

And then doing
iex -S mix phx.server

Does anyone know why it breaks for me?

First 2 of 2 Posts Switch mode

idi527

idi527

:waving_hand:

Can you post your lib/application.ex here? Judging by the error alone, there is a problem at absinthe/lib/absinthe/subscription.ex at v1.4 · absinthe-graphql/absinthe · GitHub so it’d be helpful to see how you define the children for the supervisor.

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.4 child_spec expects a list, not a single module atom.

malte

malte OP

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

Thank you very much, idiot!

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement