Как запустить relay-compiler в качестве этапа автономной сборки, когда моя схема GraphQL автоматически генерируется postgraphile (в собственном контейнере) во время выполнения?

Я создаю веб-приложение, файловая структура которого выглядит примерно так:

db/
  Dockerfile
  init/
    00-init.sql
graphql/
  Dockerfile
app/
  Dockerfile
  package.json
  bin/
    www
  public/
    index.html
    index.js
  app.js
  frontend/
    .babelrc
    package.json
    webpack.config.js
    src/
      index.jsx
docker-compose.yml

Проект состоит из трех контейнеров: db запускает сервер postgres, graphql запускает postgraphile (для автоматического создания схемы GraphQL и обработки запросов GraphQL) и app является экспресс-приложением.

Мой код внешнего интерфейса содержится в отдельном пакете в app/frontend. Обычно я запускаю npm run build в этом каталоге, чтобы вызвать webpack, преобразовывая содержимое app/frontend/src в распространяемую форму в app/public/index.js. Таким образом, создание интерфейса является автономным процессом, а само приложение просто обслуживает интерфейс.

Вот моя дилемма: я пытаюсь добавить поддержку Relay в свой интерфейс. Для этого требуется дополнительный шаг в сборке внешнего интерфейса, а именно запуск relay-compiler. Но для релейного компилятора требуется схема GraphQL. Поскольку я использую postgraphile, у меня фактически нет схемы во время автономной сборки. Postgraphile может выдавать файл схемы (с --export-schema-graphql), но на данный момент я запускаю только postgraphile в контейнере - мой контейнер db должен запуститься и инициализировать базу данных, после чего postgraphile может подключиться и сгенерировать схему, в этот момент у меня есть файл graphql.schema ... находящийся внутри контейнера graphql. Но все это происходит после того, как я запустил приложение - мне нужен файл схемы до этого, как часть автономной сборки.

Я все еще довольно хорошо знаком с Docker, GraphQL, postgraphile и особенно с Relay - поэтому я надеюсь, что кто-то, кто более знаком с этими технологиями, сможет поделиться со мной мудростью. Я не нашел большого количества ресурсов, специально посвященных использованию Relay с postgraphile.

Вместо конкретных передовых методов, возможно, кто-нибудь, кто более знаком с современной веб-разработкой, может помочь мне разобраться в следующих вариантах:

  • Могу ли я обновить свой интерфейс так, чтобы он полностью мог запускать сервер postgres и запускать postgraphile (только в зависимости от разработчика), а затем добавить автономный скрипт, который генерирует файл schema.graphql для собственного использования? Это похоже на большой беспорядок.

  • Могу ли я обновить свой контейнер graphql, чтобы он всегда записывал файл схемы, и просто вручную копировать и вставлять этот файл в мой интерфейс по мере необходимости?

  • Могу ли я добавить дополнительный процесс (который я бы запускал вручную каждый раз при изменении схемы моей базы данных), внешний по отношению к любому контейнеру (возможно, через альтернативный файл docker-compose), который раскручивает подмножество моего стека приложения, выгружает схему graphql , а выходит? Если да, то есть ли способ направить контейнер Docker для записи файла на хост-машину, или установка локального каталога в контейнер - лучший способ для этого?

  • Есть ли лучший способ структурировать мой проект, который в первую очередь позволяет избежать этой проблемы? Я новичок в Docker, и мне кажется, что, возможно, мой мозг просто разделен между мышлением до и после докера.


person awforsythe    schedule 01.04.2020    source источник


Ответы (1)


Вы можете использовать graphql-cli get-schema для загрузки файла схемы с конечной точки, которая имеет самоанализ. включено. Таким образом, вы могли просто получить схему с удаленной или локальной конечной точки PostGraphile.

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

person Herku    schedule 01.04.2020