Prisma 1 + MongoDB Atlas 部署到 Heroku returns 错误 404
Prisma 1 + MongoDB Atlas deploy to Heroku returns error 404
我已经在 Heroku 上部署了 Prisma 1 GraphQL 服务器应用程序,连接到 MongoDB Atlas 集群。
运行 prisma deploy
在本地使用默认端点 http://localhost:4466
,操作 运行 成功并且所有模式都已正确生成。
但是,如果我用 Heroku 远程主机 https://<myapp>.herokuapp.com
更改端点,prisma deploy
失败,返回此异常:
ERROR: GraphQL Error (Code: 404)
{
"error": "\n<html lang="en">\n\n<meta charset="utf-8">\nError\n\n\n
Cannot POST /management
\n\n\n",
"status": 404
}
我认为这可能与身份验证问题有关,但我感到困惑,因为我在 prisma.yml
中定义了两个安全令牌而不是 [=19] 中的管理 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,单击选项卡“Schema”returns 会出错。另一方面,正确填充了“文档”选项卡。显然,异常似乎阻止了脚本完成以生成其余模式。
Prisma/Heroku 经验丰富的人提供一点帮助会很棒。
提前致谢。
到目前为止,我仍然没有详细了解导致异常的原因。但是深入查看 Prisma 文档,我发现在版本 1 中,有必要通过 Prisma Cloud 代理应用程序。
所以很可能,在没有它的情况下直接在 Heroku 上部署会产生主要问题:基本上服务器上没有任何 Prisma 容器服务 运行ning。
我所做的是按照官方文档一步一步地了解如何在 Prisma Cloud 上部署您的服务器 (here's the video version)。正如指南中所示的示例,我已经有了自己的项目,该项目实际上分为两个不同的应用程序:分别用于客户端(前端)和一个用于 API(后端)。因此,为了生成一个新的,我将后端 API 端点指向云端生成的 Prisma 服务器的远程 URL(按照本教程创建的 Heroku 容器)。然后,只在 Prisma 服务器容器配置(由云自动生成)上留下管理秘密 API 密钥,另一方面,只在后端应用程序上留下服务秘密,最后我是能够 运行 正确地 prisma deploy
和远程 运行 我的项目。
我已经在 Heroku 上部署了 Prisma 1 GraphQL 服务器应用程序,连接到 MongoDB Atlas 集群。
运行 prisma deploy
在本地使用默认端点 http://localhost:4466
,操作 运行 成功并且所有模式都已正确生成。
但是,如果我用 Heroku 远程主机 https://<myapp>.herokuapp.com
更改端点,prisma deploy
失败,返回此异常:
ERROR: GraphQL Error (Code: 404) { "error": "\n<html lang="en">\n\n<meta charset="utf-8">\nError\n\n\n
Cannot POST /management\n\n\n", "status": 404 }
我认为这可能与身份验证问题有关,但我感到困惑,因为我在 prisma.yml
中定义了两个安全令牌而不是 [=19] 中的管理 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,单击选项卡“Schema”returns 会出错。另一方面,正确填充了“文档”选项卡。显然,异常似乎阻止了脚本完成以生成其余模式。
Prisma/Heroku 经验丰富的人提供一点帮助会很棒。
提前致谢。
到目前为止,我仍然没有详细了解导致异常的原因。但是深入查看 Prisma 文档,我发现在版本 1 中,有必要通过 Prisma Cloud 代理应用程序。 所以很可能,在没有它的情况下直接在 Heroku 上部署会产生主要问题:基本上服务器上没有任何 Prisma 容器服务 运行ning。
我所做的是按照官方文档一步一步地了解如何在 Prisma Cloud 上部署您的服务器 (here's the video version)。正如指南中所示的示例,我已经有了自己的项目,该项目实际上分为两个不同的应用程序:分别用于客户端(前端)和一个用于 API(后端)。因此,为了生成一个新的,我将后端 API 端点指向云端生成的 Prisma 服务器的远程 URL(按照本教程创建的 Heroku 容器)。然后,只在 Prisma 服务器容器配置(由云自动生成)上留下管理秘密 API 密钥,另一方面,只在后端应用程序上留下服务秘密,最后我是能够 运行 正确地 prisma deploy
和远程 运行 我的项目。