Почему я получаю ошибку CompileError, связанную с schema.ex из учебника Absinthe? - PullRequest
0 голосов
/ 24 сентября 2019

Я делал урок по Абсенту для Elixir, используя сайт howtographql.com.В какой-то момент (https://www.howtographql.com/graphql-elixir/2-queries/), при выполнении последнего шага запуска сервера graphql я получаю сообщение об ошибке.

Выполненная команда:

$ iex -S mix phx.server

Вывод:

Erlang/OTP 22 [erts-10.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]

warning: found quoted keyword "test" but the quotes are not required. Note that keywords are always atoms, even when quoted. Similar to atoms, keywords made exclusively of Unicode letters, numbers, underscore, and @ do not require quotes
  mix.exs:57

Compiling 4 files (.ex)

== Compilation error in file lib/community_web/schema.ex ==
** (CompileError) lib/community_web/schema.ex:17: undefined function field/3
    (elixir) lib/kernel/parallel_compiler.ex:229: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/7

Вот так выглядит мой lib/community_web/schema.ex:

  1 defmodule CommunityWeb.Schema do
  2   use Absinthe.Schema
  3 
  4   alias CommunityWeb.NewsResolver
  5 
  6   object :link do
  7     field :id, non_null(:id)
  8     field :url, non_null(:string)
  9     field :description, non_null(:string)
 10   end
 11 
 12   query do
 13     field :all_links, non_null(list_of(non_null(:link)))
 14   end
 15 end
 16 
 17 field :all_links, non_null(list_of(non_null(:link))) do
 18   resolve &NewsResolver.all_links/3
 19 end

Вот так выглядит мой lib/community_web/resolvers/news_resolver.ex:

  1 defmodule CommunityWeb.NewsResolver do
  2   alias Community.News
  3 
  4   def all_links(_root, _args, _info) do
  5     links = News.list_links()
  6     {:ok, links}
  7   end
  8 end

Iожидал, что сервер будет выполнен, как указано в руководстве, но отображается только сообщение об ошибке.

Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2019

Строки 17-19 в вашем lib/community_web/schema.ex не принадлежат.field/3 можно использовать только в абсенте, и он находится вне вашего модуля.Полагаю, вы намеревались поместить блок do в поле в строке 13.

Я бы попробовал заменить строку 13 на строки 17-19 и посмотреть, поможет ли это.

...