⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

4.5.1 开发和生产环境如何同步——迁移策略:开发/测试/生产环境同步

一句话破题

环境同步的关键是让迁移文件成为"唯一真相"——所有环境都通过应用相同的迁移文件来保持一致。

多环境架构

环境配置

.env.development

env
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/myapp_dev"

.env.test

env
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/myapp_test"

.env.production

env
DATABASE_URL="postgresql://user:pass@prod-host:5432/myapp_prod"

工作流程

1. 开发环境创建迁移

bash
# 修改 schema.prisma 后
npx prisma migrate dev --name add_user_avatar

2. 提交迁移文件到 Git

bash
git add prisma/migrations/
git commit -m "feat: add user avatar field"

3. 测试环境验证

bash
# CI/CD 中
DATABASE_URL=$TEST_DATABASE_URL npx prisma migrate deploy
npm run test

4. 生产环境部署

bash
# 部署脚本中
DATABASE_URL=$PROD_DATABASE_URL npx prisma migrate deploy

CI/CD 配置示例

yaml
# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - name: Install dependencies
        run: npm ci
        
      - name: Run migrations
        run: npx prisma migrate deploy
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
          
      - name: Generate Prisma Client
        run: npx prisma generate
        
      - name: Deploy application
        run: npm run deploy

环境差异处理

开发 vs 生产的常见差异

差异点开发环境生产环境
数据库SQLite / 本地 PostgreSQL云 PostgreSQL
数据量少量测试数据大量真实数据
迁移速度秒级可能分钟级
回滚代价可接受需谨慎

处理方式

prisma
// 生产环境使用 PostgreSQL 特性
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

常见问题处理

问题:迁移状态不一致

bash
# 查看迁移状态
npx prisma migrate status

# 强制标记迁移为已应用(谨慎使用)
npx prisma migrate resolve --applied "20240101120000_init"

问题:数据库 schema 与迁移不匹配

bash
# 从数据库反向生成 schema(不推荐常用)
npx prisma db pull

最佳实践

  1. 迁移文件必须提交到 Git
  2. 不要手动修改已应用的迁移
  3. 生产环境只用 migrate deploy
  4. 团队成员及时拉取最新迁移

本节小结

  • 迁移文件是环境同步的核心
  • 开发用 migrate dev,生产用 migrate deploy
  • 在 CI/CD 中自动应用迁移
  • 保持迁移文件与代码同步提交