0

我不小心将drupal 更新(6.26)安装到sites/all/modules中(的,我把整个drupal 根目录放在那里,所以我有sites/all/modules/modulessites/all/modules/sites/all/modules等等)。

然后,在不知不觉中运行了 update.php,一切正常,因为 Drupal 智能地将新的核心模块注册sites/all/modules/modules/*为核心模块。

这工作正常,直到下一次更新。我将核心drupal文件放入根目录,核心被正确替换为6.27。但是在sites/all/modules上次更新的 6.26 文件中,drupal 接受sites/all/modules覆盖核心文件的旧/modules文件。

所以 drupal 现在抱怨它仍然是 6.26,即使真正的核心是 6.27 - 这些文件实际上从未被调用,因为被/sites/all/modules/modules/*.

所以:我设法从那里删除了所有不需要的模块,并且出现了一些错误,我让它再次工作。最好的方法是:更改sites/all/modules/modules/<module>/<module>.info文件并将版本号从 6.27 调整为旧版本,例如 6.25。然后运行 ​​update.php - 所以 Drupal 识别出站点/所有/模块中的版本比核心版本中的旧版本。现在删除目录并再次运行 update.php。现在这个模块的一切都是干净的。

但这不适用于系统模块。每次我尝试删除sites/all/modules/modules/system/目录时,update.php URL 都不再可调用(HTTP 错误 500)。

任何提示如何从意外覆盖的系统模块中恢复?

4

1 回答 1

0

我终于找到了答案(感谢 Max),并希望分享它以防其他人遇到同样的问题。

如果您不小心将 drupal 更新安装到子目录(如/sites/all/modules. 运行 update.php 后,系统 db 表将更新为新路径,因此所有不在的模块/modules优先于/modules. 您可以卸载所有可选模块,以便它们也可以毫无问题地从系统表中清除。

system模块的情况下,这是不可能的,因为当安装了错误的模块时,您无法卸载模块。system

所以你要做的是:

  1. 使用例如 phpMyAdmin打开system表,然后搜索系统模块:SELECT * FROM system WHERE name = "system"
  2. filename字段从“sites/all/modules/modules/system/system.module”(或任何其他)更改为“modules/system/system.module”
  3. 现在(这在运行update.php之前很重要!)删除错误的系统模块文件夹。
  4. 运行更新.php

现在 Drupal 应该找到原始(内置)系统模块 - 一切都应该没问题。

于 2013-04-08T21:04:53.487 回答