【发布时间】:2019-01-25 13:42:07
【问题描述】:
这个问题就像“先是先有鸡还是先有蛋?”。
假设我们有一些源代码。使用 symfony 或 yii 编写。它具有数据库迁移代码,可以处理一些数据库更改。
现在,我们有一些提交会更新我们的代码(例如新类)和一些数据库更改(更改旧列或添加新表)。
当我们在 localhost 开发或更新我们的开发服务器时,有时间停止服务\任何操作并更新服务器是可以的。但是当我们尝试在生产服务器上执行此操作时,我们会在一段时间内使一切崩溃,这不是一个选择。
为什么会发生这种情况 - 当我们拉取它(git\mercurial)时,我们的代码将被更新,但不会更新数据库,并且当代码将被执行时 - 它会抛出数据库异常。要修复它,我们应该运行内置框架迁移。所以最终我们的服务器会崩溃,直到调用迁移。
代码和迁移应该“一次”更新。
处理它的最佳做法是什么?
添加: 像“运行拉取然后在一次调用中运行迁移”之类的解决方案 - 在高负载项目中不是一个选项。因为在高负载时,即使在第二个部分条目\调用也可能会中断。
我们也不能停止服务器。
【问题讨论】:
-
我们通常做的是设置一个 git 部署工作流。我们使用 git push 来推送我们的代码 Gitlab,它反过来会运行我们编写的任何测试。 Gitlab 使用 post-receive 钩子将其部署到实时服务器,该钩子反过来将用新文件替换文件,您可以让任何命令在服务器上运行。对于 symfony,我们使用 bin/console migrate 命令,因此数据库结构始终与代码同步。我创建了一篇博文来设置 Gitlab 来执行此操作:web-hints.com/tutorials/tools/how-to-deploy-from-gitlab-ci
标签: symfony yii continuous-integration migration continuous-deployment