我应该在每个应用程序启动时运行 prisma migrate 吗?

Posted

技术标签:

【中文标题】我应该在每个应用程序启动时运行 prisma migrate 吗?【英文标题】:Should I run prisma migrate on every app start? 【发布时间】:2021-05-15 13:10:48 【问题描述】:

我正在将一个使用 PostgreSQL 和 Prisma 的 NodeJS 项目部署到 Kubernetes。我创建了 Dockerfile 并将 docker 映像构建到 Docker Hub:

FROM node:lts-slim

WORKDIR /app

# Add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_ENV=production

RUN apt-get update

# Install Chromium
RUN apt-get install chromium -y

# Install yarn
RUN apt-get install yarn -y

COPY package.json /app/package.json
RUN yarn install --silent

# Add app
COPY . /app

# Generate prisma
RUN yarn run generate

# Build the app
RUN yarn build

EXPOSE 4000

# Start the app
CMD ["yarn", "run", "start"]

我想使用 CI/CD,所以我需要检查 PostgreSQL 是否更新。这可以通过npx prisma migrate resolve --preview-feature 完成

我想始终运行prisma migrate 来检查数据库是否已更新,因为如果新版本更改了schema,数据库应该会反映它。

由于 K8S pod 是短暂的,是否将 npx prisma migrate resolve --preview-feature 添加到 start 脚​​本中,这样每次应用启动时,它也会检查 DB?我不认为一直运行prisma migrate 是好的,但解决方案是什么?

提前致谢!

【问题讨论】:

【参考方案1】:

在这种情况下,我建议在部署应用程序之前在 CI/CD 步骤中运行here 中提到的prisma migrate deploy,这样您就不需要在每个启动脚本上都执行它,这在这种情况下并不理想。

此迁移只需执行一次,即可添加到管道中的预部署步骤中。

【讨论】:

以上是关于我应该在每个应用程序启动时运行 prisma migrate 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用本地 Mongodb 使用 Prisma 启动项目

使用 Prisma 的 MySQL 锻炼应用模式

Prisma migrate dev:连接到数据库时运行命令?

使用 Express 处理 Prisma 错误

prisma 部署后,prisma 没有应用更改

使用 supabase 的 Prisma 迁移失败