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的主要内容,如果未能解决你的问题,请参考以下文章