【发布时间】:2011-02-08 22:18:00
【问题描述】:
移动我的模块是否安全
- 来自 sites/all/modules/
- 致 sites/all/modules/contrib 和 sites/all/modules/custom
在生产现场?
也就是说,Drupal 是否会自动检测到模块仍然存在,但在新路径中?
【问题讨论】:
移动我的模块是否安全
在生产现场?
也就是说,Drupal 是否会自动检测到模块仍然存在,但在新路径中?
【问题讨论】:
如果您移动一个模块,Drupal 会发现旧模块已损坏,而新模块存在。它不会假设这两者是同一个东西 - 只是移动了。
【讨论】:
Drupal 将文件位置存储在系统表中,当你清除模块缓存时,信息将被重建,所以如果你移动这些东西并在之后清除缓存,你应该没问题。
【讨论】:
最好为模块提供 /contrib 和 /custom 子文件夹。对于 D7,特别是如果您使用实体,您应该禁用模块,移动它们然后重新启用。它有效。
替代方案,将模块移动到子文件夹并清除缓存,有时不起作用并可能生成 WSOD。
【讨论】:
Drupal 到 D6 的版本将模块位置保留在系统表中,但从 D7 开始,有多个记录路径的位置(例如 registry 和 registry_file 表),因此仅移动文件夹并清除缓存不会这样做,很可能会导致严重的问题。
您可以尝试的一系列步骤:
运行以下查询:
UPDATE system
SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry
SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry_file
SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib')
移动文件夹
drush cc all
【讨论】:
如果之后清除缓存(drush cc all),您可以安全地移动大部分模块。
然而,一些模块,尤其是ctools,将文件路径信息存储在系统表或缓存之外的地方。您可能必须将这些模块留在原来的位置,但您仍然可以移动其他所有内容。
【讨论】:
irakli 的回答对我来说效果很好,但我想为查询增加一些额外的复杂性,以防其他人发现它们有用。
第 1 步 – 如果您有幸让所有“自定义”模块共享一个命名空间,请更新它们:
UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE name LIKE 'custom_namespace_%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE name LIKE 'custom_namespace_%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE filename LIKE '%custom_namespace_%';
第 2 步 - 更新所有“开发”模块:
UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE filename LIKE '%devel%';
第 3 步 - 更新所有“contrib”模块:
UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib')
然后将所有模块放入适当的sites/all/modules/contrib|custom|dev 文件夹,清除缓存,然后就可以开始了。
【讨论】:
如果您在 D7 上,那么这个 drupal 文档页面是继续移动模块的最佳方式 - How to move modules and themes
【讨论】:
使用http://drupal.org/project/registry_rebuild "Registry Rebuild 还将重建系统表以将模块放置在正确的位置,以便您进行引导。"
【讨论】:
其实你只需要对系统表进行更新,然后进行如下操作:
drush rr
也许……
drush cc all
drush rr
【讨论】:
更改模块文件夹后不要忘记使用此模块:
【讨论】: