buqiyuan/nest-admin

问题请教-关于生产环境数据库更新

eamd-wq opened this issue · 4 comments

如何优雅地更新生产环境数据库
我的部署方式是用 docker compose 服务器上只有docker compose
我本地的项目执行打包 并将镜像包传到镜像仓库 然后再服务器上拉取部署

目前业务中修改了一些表的字段 想要同步到生产环境
看到了迁移的命令和方法但是有点疑惑

  1. 迁移文件生成在src文件夹中,那么部署的时候这些迁移文件是会带到生产环境的
  2. 我改如何触发这些迁移文件,难道要进到容器内部去执行命令吗 还是有什么更加优雅的方式
    虚心求教

🤔 最简单的方式,在每次容器启动之前执行一次数据库迁移就行了吧

ENTRYPOINT ./wait-for-it.sh $DB_HOST:$DB_PORT -- pm2-runtime ecosystem.config.js

- ENTRYPOINT ./wait-for-it.sh $DB_HOST:$DB_PORT -- pm2-runtime ecosystem.config.js 
+ ENTRYPOINT ./wait-for-it.sh $DB_HOST:$DB_PORT -- pnpm migration:run && pm2-runtime ecosystem.config.js

只做这一步就够了吗 我可能理解了 我去试试

还有一件事:
我没有理解任务每次执行后为什么做了一个这个操作
@OnQueueCompleted()
onCompleted(job: Job) {
this.taskService.updateTaskCompleteStatus(job.data.id)
}
在updateTaskCompleteStatus方法的实现中 发现队列中有执行时间小于当前时间的任务就会停止整个任务
这导致我高频率触发定时任务时经常会出现任务自动异常停止的情况
在我的生产环境中我去掉了这个代码逻辑,但是我仍然疑惑 这里直接停止任务可能不是一个好的方式 或者说我没有get到作者的点

我没有理解任务每次执行后为什么做了一个这个操作

文件路径
src\modules\system\task\task.processor.ts