Hanums
Elixir 1.7.4, Absinthe compilation error: The root query type must be implemented and be a of type Object
I am receiving below error at mix compile. I tried to downgrade but received error on Mac. Help please…
$ brew switch elixir 1.6.6
Error: elixir does not have a version "1.6.6" in the Cellar.
elixir installed versions: 1.7.4
I am at Elixir 1.7.4 and deps are
{:absinthe, "~> 1.4.0"},
{:absinthe_plug, "~> 1.4.0"},
{:absinthe_ecto, "~> 0.1.3"},
The root query type must be implemented and be a of type Object
#Example
defmodule MyApp.Schema do
use Absinthe.Schema
query do
#Fields go here
end
end
From the graqhql schema specifiation
A GraphQL schema includes types, indicating where query and mutation
operations start. This provides the initial entry points into the type system.
The query type must always be provided, and is an Object base type. The
mutation type is optional; if it is null, that means the system does not
support mutations. If it is provided, it must be an object base type.
Reference: https://facebook.github.io/graphql/#sec-Initial-types
lib/absinthe/schema.ex:271: Absinthe.Schema.__after_compile__/2
(stdlib) lists.erl:1263: :lists.foldl/3
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:206: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
Marked As Solved
Eiji
My bad - this question just reminded me this old issue and I just checked if 1.7-issue branch is still there and it is. I had just took a look at branches details and found:
1.7-issue Updated 6 months ago by benwilson512
Also Liked
benwilson512
dimitarvp
That’s why I posted above. Just wanted to add one more voice to the fact that Elixir 1.7.4 and Absinthe 1.3 combo leads to compilation errors. And that upgrading to 1.4 fixes it.

dimitarvp
What Ben recommended to you is not Elixir-specific. It’s a Linux command.
Delete your _build and deps directories (at the root of your project) and then execute this:
mix do deps.get, compile
benwilson512
Oh you’re actually on Absinthe 1.3.2? That simply won’t work on 1.7.4. Elixir changed some details about how module attributes worked that absinthe was accidentally relying on. You need to upgrade to 1.4.13.
kokolegorille
I have been using Absinthe 1.4 with Elixir > 1.7
Here is my dependencies (Do not use 1.4.0, prefer 1.4)
{:ecto, "~> 3.0", override: true},
#
{:absinthe, "~> 1.4"},
{:absinthe_plug, "~> 1.4"},
{:absinthe_ecto, "~> 0.1.3"},
{:absinthe_relay, "~> 1.4"},
{:absinthe_phoenix, "~> 1.4"},
I am overriding ecto because absinthe_relay requires ecto 2, but that is not required if You don’t use relay.
At least You need one query inside the query block. For example, You can try this…
query do
field :hello, :string do
resolve fn _, _ -> {:ok, "world!"} end
end
end
In graphiql, You can query
{
hello
}
And this would be the result.
{
"data": {
"hello": "world!"
}
}
Do not forget to specify the json encoder in your router…
scope "/" do
pipe_through :api
# Note: downloaded from CDN!
forward "/graphiql",
Absinthe.Plug.GraphiQL,
schema: GraphqlWeb.Schema,
json_codec: Jason
end







