按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。
8年前关闭。
跟踪和/或自动执行数据库架构更改的最佳方法是什么?我们的团队使用Subversion进行版本控制,我们已经能够以这种方式自动执行一些任务(将构建推送到暂存服务器,将经过测试的代码部署到生产服务器),但是我们仍在手动进行数据库更新。我想找到或创建一个解决方案,使我们能够在具有不同环境的服务器之间高效地工作,同时继续使用Subversion作为后端,通过该后端代码和数据库更新被推送到各种服务器。
许多流行的软件包都包括自动更新脚本,该脚本可检测数据库版本并应用必要的更改。这是否是在更大范围内(跨多个项目,有时跨多种环境和语言)执行此操作的最佳方法?如果是这样,是否有任何现有代码可以简化流程,或者最好只是推出我们自己的解决方案?之前有没有人实现过类似的东西并将其集成到Subversion提交后钩子中,还是一个坏主意?
虽然支持多个平台的解决方案是更可取的,但是我们绝对需要支持Linux / Apache / MySQL / PHP堆栈,因为我们的大部分工作都在该平台上。
在Rails世界中,存在迁移的概念,即脚本,其中对数据库的更改是使用Ruby而不是特定于数据库的SQL风格进行的。您的Ruby迁移代码最终将转换为特定于您当前数据库的DDL。这使得切换数据库平台非常容易。
对于您对数据库所做的每一次更改,您都要编写一个新的迁移。迁移通常有两种方法:应用更改的“向上”方法和撤消更改的“向下”方法。单个命令可以使数据库更新,也可以用于将数据库带到架构的特定版本。在Rails中,迁移与项目其他代码一样,都保存在项目目录中自己的目录中,并被检入版本控制中。
该Oracle Rails迁移指南很好地介绍了迁移。
使用其他语言的开发人员已经研究了迁移并实现了自己的特定于语言的版本。我知道 Ruckusing 是一个PHP迁移系统,该系统以Rails的迁移为模型。这可能是您要寻找的。