Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 当postgraphile(在自己的容器中)在运行时自动生成GraphQL模式时,如何将中继编译器作为脱机构建步骤运行?_Docker_Graphql_Relay_Postgraphile - Fatal编程技术网

Docker 当postgraphile(在自己的容器中)在运行时自动生成GraphQL模式时,如何将中继编译器作为脱机构建步骤运行?

Docker 当postgraphile(在自己的容器中)在运行时自动生成GraphQL模式时,如何将中继编译器作为脱机构建步骤运行?,docker,graphql,relay,postgraphile,Docker,Graphql,Relay,Postgraphile,我正在构建一个web应用程序,其文件结构如下所示: 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

我正在构建一个web应用程序,其文件结构如下所示:

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
来调用webpack,将
app/frontend/src
的内容构建为
app/public/index.js
中的可再发行表单。这样一来,构建前端是一个离线过程,而应用程序本身只是为前端服务

这是我的困境:我正试图为我的前端添加中继支持。这需要在前端构建中添加一个附加步骤,即运行中继编译器。但中继编译器需要一个GraphQL模式。因为我使用的是postgraphile,所以在脱机构建期间实际上没有模式。Postgraphile可以吐出一个模式文件(使用
--export schema graphql
),但现在我只在容器中运行Postgraphile-我的db容器必须启动并初始化数据库,此时Postgraphile可以连接并生成一个模式,此时我有一个graphql.schema文件。。。位于graphql容器中。但这一切都发生在我启动应用程序之后——在此之前,我需要一个模式文件,作为脱机构建的一部分

我对Docker、GraphQL、postgraphile,尤其是Relay还很熟悉,所以我希望更熟悉这些技术的人能给我一些建议。我还没有找到大量的资源专门讨论如何使用带有postgraphile的中继

除了特定的最佳实践之外,也许更熟悉现代web开发的人可以帮助我整理以下选项:

  • 我是否要更新我的前端,使其完全能够启动postgres服务器并运行postgraphile(仅作为开发人员依赖项),然后添加一个脱机脚本,生成一个schema.graphql文件供自己使用?那看起来像一个大烂摊子

  • 我是否要更新graphql容器,使其总是写出一个模式文件,然后根据需要手动将该文件复制并粘贴到前端

  • 我是否在任何容器外部(可能通过另一个docker compose文件)添加了一个额外的进程(在数据库模式发生更改时,我会手动运行该进程),该进程会启动应用程序堆栈的一个子集,转储graphql模式并退出?如果是这样,是否有某种方法可以指导Docker容器在主机上写出文件,或者将本地目录装载到容器是实现这一点的最佳方法

  • 有没有一种更好的方法来组织我的项目,从一开始就避免这个问题?我对Docker是新手,我觉得我的大脑可能只是在前Docker和后Docker思维之间分裂

您可以使用
get schema
从启用了内省的端点下载架构文件。通过这种方式,您可以简单地从远程或本地PostGraphile端点获取模式

尽管如此,运行本地版本的PostGraphile,可靠地重新创建与生产模式相同的模式,也是非常有益的