一些模块具有取消安装例程。通常会删除该模块的数据库表,变量表中的变量以及该模块引入的语言环境。这些例程位于该.install
模块的中。
因此,如果没有该模块,则无法运行它们。所以这是我们当前的步骤。我的问题是:这可以更简单,更有效地完成吗?说我删除foo_bar模块。
- 在RCS中,准备一个新版本,其中:
- 删除了在foo_bar之上使用或构建的所有css和主题覆盖。
- 取决于foo_bar的模块的所有css和theme-overrides均被删除。
- 将该发布推送到接受状态。(使用admin / modules)使用生产数据库的最新副本测试取消安装。
- 如果一切顺利,则将新的代码库部署到生产环境中,然后在其中释放foo_bar及其依赖项。这将在各个模块中调用卸载,以清理数据库。
- 在RCS(git)中,准备一个新发行版,其中的代码实际上已被删除。
- 将其部署到接受测试的地方,以便我们测试是否意外地依赖于此(一些丑陋的模块或主题功能直接包含来自其他模块的文件。最著名的是CSS,JS或图像文件)。
- 如果接受,则将新版本部署到生产中。生产现在有一个干净的数据库和一个干净的代码库。
我看不到如何解决的问题是,这总是需要两个版本。由于在Drupal中,一个发行版要求站点处于离线状态,这意味着两次停机仅删除一个模块。它还需要两个发布过程,在专业托管环境中,这可能是非常昂贵,费时或令人沮丧的。
如果在第一次迭代中从代码库中删除模块,则无法运行卸载钩子,从而在数据库中保留了很多皮棉;不仅是几个表,而且大多数是变量和语言环境。如果我们不从代码库中删除模块,这意味着代码库将随着陈旧的未使用代码一起增长;这不会产生性能开销,但是会使维护代码越来越难。
您如何处理?
[编辑:经常添加关于部署过程很困难的说明]