我可以将我的模块
- 从sites/all/modules/
- 移动到sites/all/modules/contrib和sites/all/modules/custom
在生产网站上这样做安全吗?
也就是说,Drupal是否会自动检测到模块仍然存在,但位于新路径中?
Drupal 6及以下版本将模块位置保存在系统表中,但从Drupal 7开始,路径记录在多个地方(例如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
对我来说,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_%';
第二步 - 更新所有“dev”模块:
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%';
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
文件夹中,清除缓存,就可以开始使用了。
Drupal将文件位置存储在系统表中,清除模块缓存后信息将被重建,因此如果您移动文件并在清除缓存后进行操作,则应该没有问题。
对于模块来说,拥有/contrib和/custom子文件夹是很好的。对于D7,特别是如果您使用实体,您应该禁用这些模块,将它们移动,然后重新启用。这样可以正常工作。
另一种方法是将模块移动到子文件夹中并清除缓存,但有时不起作用,可能会生成WSOD。
使用http://drupal.org/project/registry_rebuild。 "Registry Rebuild 还将重建系统表,以便正确放置模块,从而可以引导启动。"
drush rr
可能还有其他内容...
drush cc all
drush rr
如果您在之后清除缓存(drush cc all),则可以安全地移动大多数模块。
然而,一些模块,特别是ctools,在系统表或缓存以外的位置存储文件路径信息。您可能需要将这些模块保留在原始位置,但仍然可以移动其他所有内容。