php - CakePHP:使用过滤器部署数据库更改

标签 php mysql cakephp deployment database-migration

我们需要定期修改生产数据库的结构。在许多情况下,这些更改对应于引用新更改的代码库中的更改。

当我们提取新的更改并运行新的 SQL 查询时,我们通常最终会放置一个失败鲸鱼页面一分钟,但我有兴趣编写一个组件或其他东西来动态运行 SQL 查询,所以不需要停机。

我还没有尝试过,但这是我的计划:

  1. 编写一个组件或其他东西来运行一个或多个特定查询。这些查询可能会有诸如 IF EXISTS 之类的检查,因此它们只运行一次。我认为它还必须清除模型/持久缓存。
  2. 从 AppController 的 beforeFilter 内部调用上述组件/查询。
  3. 将更改拉入实时状态(使用上述代码)。
  4. 等待几秒钟,让应用运行一次(由其他用户或我们)。
  5. 删除触发 SQL 查询运行的 beforeFilter 代码。

这是一个疯狂的想法吗?这是我的问题: A. 这样的东西会起作用吗? B. 有没有更好的方法来做到这一点,而我却错过了? C. 我需要了解有关模型缓存的哪些信息才能避免引发错误。据推测,调试级别将设置为 0(因为该站点将投入生产)。

顺便说一句,似乎有必要提及我们不在负载平衡系统上。我们使用单个专用服务器。

最佳答案

Will something like this work?

有点。您可能仍会遭受停机时间。即使只是在查询完成运行时短暂地进行。如果站点在部署期间流量很大,您也可能会遇到并发问题。

Is there a better way to do this that I'm missing?

使用负载平衡系统,您可以一次更新一个系统,同时将流量转移到另一个系统,直到所有系统都更新为止。

你可以feature flag你的代码。启用此功能后,代码才会运行。因此,启动您的代码,并在数据库更新完成后启用该功能。

What do I need to know about the model caches to keep from throwing errors.

我对缓存不太熟悉,但缓存可以提供站点可用的错觉。但任何动态请求(表单提交)仍然可能导致错误。

顺便说一句,看看 Schema Migrations如果您还没有的话。

关于php - CakePHP:使用过滤器部署数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793777/

相关文章:

mysql - LIMIT 和未索引的列似乎阻止了 ORDER BY 优化

php - 为什么我们不能对在 cakephp2.x 中创建和修改的字段使用 TIMESTAMP 数据类型?

CakePHP:从管理脚手架中删除字段的最佳方法

php - 将计数查询和获取查询合并为一个并让 MySQL 完成这项工作

php - 使用 jQuery 从 JSON 文件获取 @attributes

php 文件不接受 css

mysql - 使用随机数更新表行失败

php - 如何删除数据库“mysql”中的字符

php - 当年经过了多少天

php - Cakephp 表单输入与数组选项