docker 当我的GraphQL模式是由postgraphile(在它自己的容器中)在运行时自动生成时,我如何将中继编译器作为离线构建步骤运行?

kmpatx3s  于 2023-03-01  发布在  Docker
关注(0)|答案(1)|浏览(102)

我正在构建一个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中的可再分发形式。这样,构建前端是一个离线过程,应用程序本身只是提供前端。
我的困境是:我试图在我的前端中添加Relay支持。这需要在前端构建中执行额外的步骤,即运行relay-compiler。但是relay-compiler需要一个GraphQL模式。由于我使用的是postgraphile,所以在离线构建期间实际上没有模式。Postgraphile可以输出一个模式文件(使用--export-schema-graphql),但到目前为止,我只在一个容器中运行postgraphile-我的DB容器必须启动并初始化数据库,此时postgraphile可以连接并生成一个模式,这时我有一个graphql.schema文件...坐在graphql容器里面。但是这一切都发生在我启动应用程序之后--在那之前我需要一个schema文件,作为离线构建的一部分。
我对Docker、GraphQL、postgraphile,尤其是Relay还很绿色,所以我希望更熟悉这些技术的人能给我一些建议。我还没有找到很多资源专门介绍如何使用Relay和postgraphile。
除了特定的最佳实践,也许更熟悉现代Web开发的人可以帮助我整理这些选项:

  • 我是否需要更新我的前端,使它完全能够启动postgres服务器并运行postgraphile(仅作为开发依赖项),然后添加一个离线脚本来生成schema.graphql文件供自己使用?
  • 我是否应该更新我的graphql容器,使它总是写出一个模式文件,然后根据需要手动复制并粘贴该文件到我的前端?
  • 我是否要添加额外的进程(每当我的数据库模式发生变化时,我都会手动运行它)外部的任何容器(也许通过一个替代的Docker组合文件),它旋转我的应用程序堆栈的一个子集,转储出一个graphql模式,然后退出?如果是这样,是否有一些方法可以指导Docker容器在主机上写出一个文件,还是将本地目录挂载到容器是实现这一目的的最佳方法?
  • 有没有一种更好的方法来构建我的项目,首先避免这个问题?我是新来的Docker,我觉得也许我的大脑只是分裂之间的前Docker和后Docker心态。
uyhoqukh

uyhoqukh1#

您可以使用graphql-cli'sget-schema从启用了自检的端点下载架构文件,这样您就可以简单地从远程或本地PostGraphile端点获取架构。
尽管如此,运行本地版本的PostGraphile也是非常有益的,它可以可靠地重新创建与生产模式相同的模式。

相关问题