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

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

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 - это приложение express.

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 01 апреля 2020

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

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

...