Prisma 1 + MongoDB Atlas 部署到 Heroku 返回错误 404

Posted

技术标签:

【中文标题】Prisma 1 + MongoDB Atlas 部署到 Heroku 返回错误 404【英文标题】:Prisma 1 + MongoDB Atlas deploy to Heroku returns error 404 【发布时间】:2020-10-17 03:39:11 【问题描述】:

我在 Heroku 上部署了一个 Prisma 1 GraphQL 服务器应用,连接到一个 MongoDB Atlas 集群。 使用默认端点http://localhost:4466 在本地运行prisma deploy,操作成功运行并且所有模式都正确生成。 但是,如果我使用 Heroku 远程主机 https://<myapp>.herokuapp.com 更改端点,prisma deploy 将失败,返回此异常:

错误:GraphQL 错误(代码:404) "错误": "\n\n\n\n错误\n\n\n

无法发布/管理
\n\n\n", “状态”:404

我认为这可能与身份验证问题有关,但我感到困惑,因为我在 prisma.yml 中定义了安全令牌,而不是在 docker-compose.yml 中定义了管理 API 密钥。 如果有帮助,这是我当前的配置:

prisma.yml

# The HTTP endpoint for your Prisma API
# Tried with https://<myapp>.herokuapp.com only too with the same result
endpoint: https://<myapp>.herokuapp.com/dinai/staging
secret: $env:PRISMA_SERVICE_SECRET
# Points to the file that contains your datamodel
datamodel: datamodel.prisma
databaseType: document
# Specifies language & location for the generated Prisma client
generate:
  - generator: javascript-client
    output: ../src/generated/prisma-client
# Ensures Prisma client is re-generated after a datamodel change.
hooks:
  post-deploy:
    - prisma generate

docker-compose.yml

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.34
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
        managementApiSecret: $PRISMA_MANAGEMENT_API_SECRET
        databases:
          default:
            connector: mongo
            uri: mongodb+srv://$MONGO_DB_USER:$MONGO_DB_PASSWORD@$MONGO_DB_CLUSTER/myapp?retryWrites=true&w=majority
            database: myapp

另外,一个奇怪的情况也发生了。在这两种情况下,如果我尝试使用 GraphQL Playground 导航生成的 API,单击“架构”选项卡会返回错误。另一方面,“文档”选项卡已正确填充。显然,似乎异常阻止了脚本完成以生成其余模式。

有 Prisma/Heroku 经验的人提供一点帮助会很棒。

提前致谢。

【问题讨论】:

【参考方案1】:

到目前为止,我仍然不清楚是什么导致了详细的异常。但是深入研究 Prisma 文档,我发现在版本 1 中,有必要通过 Prisma Cloud 代理应用程序。 因此,如果没有它直接在 Heroku 上部署,可能会产生主要问题:服务器上基本上没有运行任何 Prisma 容器服务。

我所做的是一步一步地按照官方文档关于如何在 Prisma Cloud (here's the video version) 上部署服务器。如指南中的示例所示,我已经有自己的项目,它实际上分为两个不同的应用程序:一个用于客户端(前端),一个用于 API(后端)。因此,为了生成一个新的,我将后端 API 端点指向由云生成的 Prisma 服务器的远程 URL(按照教程创建的 Heroku 容器)。然后,只在 Prisma 服务器容器配置(由云自动生成)上保留管理秘密 API 密钥,另一方面,只在后端应用程序上保留服务秘密,最后我能够运行prisma deploy 正确并远程运行我的项目。

【讨论】:

以上是关于Prisma 1 + MongoDB Atlas 部署到 Heroku 返回错误 404的主要内容,如果未能解决你的问题,请参考以下文章

prisma mongodb 试用

Prisma 无法使用本地 Mongodb 部署

Prisma 在 MongoDB 中创建新数据库

使用 Prisma + MongoDB + GraphQL 的嵌套关系返回 null

prisma连接MongoDB

我无法使用本地 Mongodb 使用 Prisma 启动项目