Prisma:所有迁移都已应用

Posted

技术标签:

【中文标题】Prisma:所有迁移都已应用【英文标题】:Prisma: All migrations are already applied 【发布时间】:2020-10-22 10:21:09 【问题描述】:

目标:在 Kubernetes 集群的 InitContainer 内运行数据库迁移以更新数据库。

预期结果:容器应该运行,并将 Prisma 迁移打包到容器中。随后,Prisma migrate 命令应该运行并更新数据库,

npx prisma migrate up --experimental

当数据库为空时容器运行,迁移命令被调用,我收到以下消息,

All migrations are already applied

虽然这会在数据库中创建 _Migration 表,但不会应用任何迁移。如果我从本地计算机连接到数据库,我可以运行迁移脚本并更新所有内容。如果我从容器中再次运行迁移脚本,我会收到以下错误,

Error: There are more migrations in the database than locally. This must not happen. Local migration ids: . Remote migration ids

为了确保我正确连接到我运行的数据库,

npx prisma introspect --print

这会从数据库中打印出 DB 架构,以证明烘焙到容器中的连接字符串实际上命中了正确的 DB。

我现在有点困惑问题可能出在哪里。有谁知道如何最好地调试 Prisma 迁移,或者是否有任何已知问题可能导致此问题?

【问题讨论】:

您的容器是否包含prisma/migrations/migrate.lock 文件?此文件应包含您的迁移。 是的,我有 migrate.lock 文件。 这看起来好像 migrations 文件夹不存在于容器中,或者 CLI 找不到它。你能分享你用来为容器创建镜像的 Dockerfile 吗? 你是对的,它看不到迁移文件夹,但这是由于一个愚蠢的错误,我在运行命令之前没有进入 Prisma 文件夹。 【参考方案1】:

这看起来像一个愚蠢的错误,我需要 cd 到包含迁移的 prisma 文件夹才能运行

cd prisma
npx prisma migrate up --experimental

【讨论】:

以上是关于Prisma:所有迁移都已应用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Github-actions 在 Docker 上使用 Mysql 运行 Prisma 迁移

Apollo / GraphQL / Prisma“登录”突变不会返回所有用户字段

如何检测到所有页面组件都已加载到 Oro 应用程序中?

使用 supabase 的 Prisma 迁移失败

Go Evio 应用程序突然没有响应。分析显示所有线程都已停止

为啥 referentialIntegrity = "prisma" 不能防止迁移中的外键?