Deploying database changes with Prisma Migrate
Source URL: https://docs.prisma.io/docs/orm/prisma-client/deployment/deploy-database-changes-with-prisma-migrate
Deploying database changes with Prisma Migrate
Section titled “Deploying database changes with Prisma Migrate”Learn how to deploy database changes with Prisma Migrate
To apply pending migrations to staging, testing, or production environments, run the migrate deploy command as part of your CI/CD pipeline:
npm
pnpm
yarn
bun
npx prisma migrate deployThis guide does not apply for MongoDB.
Instead of migrate deploy, db push is used for MongoDB.
Exactly when to run prisma migrate deploy depends on your platform. For example, a simplified Heroku workflow includes:
- Ensuring the
./prisma/migrationfolder is in source control - Running
prisma migrate deployduring the release phase
Ideally, migrate deploy should be part of an automated CI/CD pipeline, and we do not generally recommend running this command locally to deploy changes to a production database (for example, by temporarily changing the DATABASE_URL environment variable). It is not generally considered good practice to store the production database URL locally.
Beware that in order to run the prisma migrate deploy command, you need access to the prisma dependency that is typically added to the devDependencies. Some platforms like Vercel, prune development dependencies during the build, thereby preventing you from calling the command. This can be worked around by making the prisma a production dependency, by moving it to dependencies in your package.json. For more information about the migrate deploy command, see:
migrate deployreference- How
migrate deployworks - Production troubleshooting
Deploying database changes using GitHub Actions
Section titled “Deploying database changes using GitHub Actions”As part of your CI/CD, you can run prisma migrate deploy as part of your pipeline to apply pending migrations to your production database.
Here is an example action that will run your migrations against your database:
deploy.yml
name: Deploy on: push: paths: - prisma/migrations/** branches: - main
jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v3 - name: Setup Node uses: actions/setup-node@v3 - name: Install dependencies run: npm install - name: Apply all pending migrations to the database run: npx prisma migrate deploy env: DATABASE_URL: ${{ secrets.DATABASE_URL }}The highlighted line shows that this action will only run if there is a change in the prisma/migrations directory, so npx prisma migrate deploy will only run when migrations are updated.
Ensure you have the DATABASE_URL variable set as a secret in your repository, without quotes around the connection string.