【问题标题】:Good DB Migrations for CakePHP?CakePHP 的良好数据库迁移?
【发布时间】:2010-03-26 10:08:48
【问题描述】:

我一直在为 CakePHP 尝试一些迁移脚本,但我遇到了所有形式的问题。

请就您使用 live 和 know works 的 Cake 迁移选项向我提供建议。

我想要以下“功能”:

  • 支持 CakePHP 1.2(例如,只有在 1.3 稳定且我的应用程序迁移到新代码库时,CakeDCs 迁移才是一个选项)
  • 支持(或至少不停止)具有不同数据库配置的模型。
  • 支持 app/models 子文件夹中的模型
  • 插件中的支持模型
  • 支持不符合 Cake 约定的表(我有一些特殊的表没有单个主键字段,需要保留它们)
  • 非常适合通过 Capistrano 和 Git 进行自动部署。

我不需要 rails 样式的版本化文件,一个 git 版本化的架构文件,它可以与现有架构进行实时比较。那就是:我喜欢 Cake 中的 SchemaShell,除了它不符合我上面的大多数要求。

我看过并测试过:

【问题讨论】:

  • +1,有趣的问题
  • 通过忽略文档并阅读源代码,我发现了如何使 Schema Shell 几乎可以满足我的所有需求。我发现 -f 不会“强制‘生成’来创建新模式。”。它用于“强制将所有表生成到架构中......”。但不仅如此,而且这不在文档中:它还可以用于强制更新以与生成相同的方式忽略模型类,从而更新使用该选项生成的模式。
  • @Matin Westin -- 为什么不将这些见解贡献给文档 wiki?
  • 如果您指的是 book.cakephp.org,我会这样做......就像我一直做的那样。
  • 您能否将您的评论写成对您自己问题的正确答案,以便它可以被接受和投票等?

标签: database cakephp migration cakephp-1.2


【解决方案1】:

在快速尝试了 Juan 的插件和提到的所有其他插件(来自 CakeDC 的插件除外)之后,我将尝试用我的发现来更新这个“主题”......因为我没有为 CakePHP 1.3 和那个迁移更新相关的应用程序插件需要 1.3

我必须注意,关于失败和插件不适合我的 cmets 应该主要被理解为“不适合我的需要”或“我在尝试它们时犯的错误”。在某种程度上,有些人可能会将此类 cmets 解读为请求修订文档。我并不是暗示测试的插件本质上是有缺陷的、错误的或损坏的。我确信它们都在正确的环境和正确的工作流程下工作。

CakePHP 架构外壳

  • 有我喜欢的简单概念。 Schema 链接到用于管理其修订的代码和 SCM。

  • 在一定程度上工作得很好。那一点是:

  • 似乎不适合自动部署。 IE。 update 命令只能修改表,不能处理新建或删除的表。这些是由它们自己的 shell 命令处理的,这使得 Cap 风格的部署变得复杂。当脚本尝试“更改”不存在的表时,使用新表运行更新也会产生错误。我注意到这是有意的还是我遇到的问题。 (在google群里问过,还没回复)

CakeDC 迁移

  • 听起来他们拿走了 Schema Shell 并“修复”了它。文档解释了一个稍微复杂的过程(至少解释一下),但它可能会按我的意愿工作。

YAML、joelmoss 和 juan 的迁移

  • 这些都共享版本文件的 Rails 概念以及它们之间的“上升”和“下降”。我不太喜欢这样,因为我看不到我的项目在不对源代码执行相同操作的情况下更新或回滚架构迁移的情况。我也可以不用在迁移脚本中迁移现有数据,因为我预见到这种情况对我来说是非常罕见的。

  • 这些都希望我不要通过迁移脚本以外的任何其他方式接触数据库。在我满意之前,我无法打开我最喜欢的 MySql-GUI 并四处玩耍,然后通过这些脚本生成一个“差异”。 (至少在我的简短测试中我没有找到记录的方法。)我必须在 YAML 或 php 文件中手动编写更改。由于我开始使用大约 30 个表的现有项目,我不喜欢手动重写该模式的想法。但是其中一些插件并没有为我的所有表创建一个好的起点文件。这也可能是由于我的简短测试和/或无法找到此类功能的文档。我没有深入研究其中大部分的源代码。

我的下一步似乎是将我的项目更新到 CakePHP 1.3 并尝试最后一个插件。但我不知道我什么时候有时间。 (即没有人屏住呼吸)

如果您认为我误解了这些插件中的任何一个是如何工作的,并且可以就如何使它们为我工作提供帮助。我很乐意回复评论。

【讨论】:

    【解决方案2】:

    如果您喜欢 Rails 迁移,请使用 Rails 迁移...看看这个 gem https://github.com/thuss/standalone-migrations。我在日常工作中使用这个 gem 和 cakephp。

    【讨论】:

    • 我是 Ruby 的粉丝。现在必须处理PHP项目。我希望 Rails Migrations 能让我的工作轻松一点:)
    【解决方案3】:

    我有一个支持 CakePHP 1.2 的插件,你可以在 http://github.com/jrbasso/migrations 看到

    它使用蛋糕风格制作所有东西。不使用 yaml,使用对象来定义表。您可以毫无问题地从 Cake 导入模型...

    【讨论】:

      【解决方案4】:

      我在生产环境中将CakeDC migrations plugin 用于 1.3.x 和 2.x 并且很高兴。在 1.3.x 版本中存在一些与创建迁移相关的错误,但它们很容易修复。

      【讨论】:

        【解决方案5】:

        在此处使用 3.x Migrations 插件。

        其他旧工具的所有问题都已通过设计解决。 它正在大力开发,每周都会获得更多功能和修复。

        您还可以轻松地将新工具用于现有的 1.x 和 2.x 应用程序。 顺便说一句,我刚刚在how to use 3.x Migrations in 2.x apps 上发布了一个帖子。

        【讨论】:

          猜你喜欢
          • 2013-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          相关资源
          最近更新 更多