如何在开源项目版本中管理数据库架构更改


9

我管理一些K-12学校和一些大学使用的开源PHP / MySQL Web应用程序。我也是该项目的唯一开发人员。虽然它过去只不过是我老板托管的应用程序的源代码下载,但在过去的一年中,我一直致力于将其变成一个“真正的”开源项目,其中包含文档,带编号的发行版,公共变更日志等。

我正在寻求改善升级过程,其中一个潜在的难题(尤其是对于IT专业人员匮乏的学校而言)是在两个发行版之间对数据库架构的更改。它们不经常发生或变化不大,但我希望您对此过程提出建议。

当前,我维护一个基本的SQL安装脚本,以在新安装中设置数据库。这包括当前版本的完整架构;全新安装不需要任何进一步的操作。版本之间发生的更改存储在upgrade-$releasever.sql脚本中,对于所有被跳过的版本,有必要增量运行所有升级脚本。

Shell脚本不合适,因为我们很多用户都在没有Shell访问权限的主机上运行。由于其他优先事项,不太可能实现基于PHP浏览器的复杂安装程序/升级脚本。但是,我想使用基于浏览器的PHP脚本来简化升级。关于如何处理的建议?

Answers:


3

我的项目 有一个update.php文件,用户在安装新版本的软件后即可通过浏览器运行。该更新脚本检查保留在活动数据库的表中的数据库版本号,并执行任何数据库更改操作,以使该数据库架构更新到最新版本,包括更新该数据库版本号。


我查看了您的upgrade.php脚本,这似乎是我的初衷。谢谢。
迈克尔

2

Drupal CMS为您的问题提供了一个有趣的解决方案。如果您正在使用PHP开发基于Web的解决方案,则建议总体上看一下Drupal。这是我最喜欢的PHP CMS,我会偏颇地说它是最好的。;)

Drupal提供了非常复杂的数据库交互包装器。它允许从模块开发人员那里提取实际的数据库类型,因此您不必担心服务器是否运行PostgreSQL,MySQL等。您也可以创建自己的接口。每个模块都必须提供包含hook_schema和的module.install文件hook_installhook_schema用于在hook_install运行安装过程时声明模块的表架构。该体系结构也支持更新的概念,因此,如果用户已经安装了模块,则将调用正确的更新挂钩,并允许轻松地更新表架构。

看看:http : //drupal.org/node/146862即使Drupal不适合您,我相信您也可以从他们的体系结构决策中学到一些东西。


0

我们通过创建版本文件夹来做到这一点。我们将所有数据库脚本放置在该文件夹中。是时候将该产品推广给新客户了,他们获得了最新版本。

我们还将所有升级脚本保留在此文件夹中。这样,我们可以将客户从版本x迁移到版本y。

这不是最好的方法,但是对我们有用。


据我了解,这听起来与我现在的处理方式相似-让用户自己负责并以正确的顺序运行升级脚本。
迈克尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.