用途
prisma migrate deploy 用于在生产或预发布(staging)环境中应用待执行的数据库迁移。它面向的是非开发环境,是 Prisma 迁移工作流中负责“部署”环节的命令。
主要能力
- 应用 prisma/migrations/ 目录下所有待执行的迁移。
- 更新 _prisma_migrations 表,记录迁移的应用状态。
- 不会生成新的迁移文件。
- 不会运行种子(seed)脚本。
- 适合在 CI/CD 和生产环境中安全使用。
使用方式
基本命令:
prisma migrate deploy
可用选项:
--schema:指定自定义的 Prisma schema 路径。--config:指定自定义的 Prisma 配置文件路径。
在 CI/CD 流水线中使用(GitHub Actions 示例):
# GitHub Actions example
- name: Apply migrations
run: npx prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
在 Docker 部署中使用(启动应用前先运行迁移):
# Run migrations before starting app
CMD npx prisma migrate deploy && node dist/index.js
配置方面,需确保 prisma.config.ts 中包含生产数据库 URL:
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
},
})
适用场景
- 生产环境部署。
- 预发布(staging)环境。
- CI/CD 流水线。
- 任何非开发环境。
与 migrate dev 的对比
| 特性 | migrate dev | migrate deploy |
|---|---|---|
| 创建迁移 | 是 | 否 |
| 应用迁移 | 是 | 是 |
| 检测漂移 | 是 | 否 |
| 交互提示输入 | 是 | 否 |
| 使用影子数据库 | 是 | 否 |
| 生产环境安全 | 否 | 是 |
| 出问题时 | 提示 | 失败 |
生产工作流
- 开发阶段:在本地创建迁移。
prisma migrate dev --name add_feature
- 提交:将迁移文件纳入版本控制。
git add prisma/migrations
git commit -m "Add feature migration"
- 部署:在生产环境应用。
prisma migrate deploy
错误处理
迁移失败时:
如果某个迁移失败,migrate deploy 会以错误退出,该失败迁移会在 _prisma_migrations 中被标记为 failed。修复步骤:
- 解决问题(修复 SQL、数据库状态等)。
- 标记为已解决:
prisma migrate resolve --applied <migration_name>。 - 重新运行:
prisma migrate deploy。
部署前先检查状态:
prisma migrate status
该命令会显示待执行和已应用的迁移。
最佳实践
- 在 CI 中始终先运行 migrate status,再运行 migrate deploy。
- 准备回滚方案(迁移前备份)。
- 先在 staging 环境测试迁移。
- 切勿在生产环境使用 migrate dev。
限制
该命令不会生成新迁移,也不会运行种子脚本;不检测漂移,不进行交互提示,不使用影子数据库;遇到问题直接失败而非重置。