2010-04-16 29 views
13

是否安全将我模块Drupal的 - 移动模块文件夹

  • 网站/所有/模块/
  • 网站/所有/模块/的contrib网站/所有/模块/定制

在生产现场?

也就是说,Drupal会自动检测模块是否仍然存在,但在新路径中?

回答

3

如果您移动了一个模块,Drupal将会看到旧模块已损坏,并且存在一个新模块。它不会认为两者是相同的东西 - 只是移动。

+0

谢谢,如果有一个人可以确认这一点,将关闭 – davidosomething 2010-04-16 16:59:54

+2

如果您禁用该模块,将其移动,然后重新启用它在新的位置,你应该罚款。它可能会保持其设置。如果你简单地将它从Drupal下拉出来,它不会那样。 – McAden 2010-04-16 17:04:19

+2

步骤1:移动模块。第2步:清除缓存。如果一个模块在这一点上保持中断,那么就有一个错误。 – Grayside 2010-04-17 07:08:01

2

Drupal将文件位置存储在系统表中,当您清除模块缓存时,信息将被重建,因此如果您移动了内容并在事后清除缓存,则应该没问题。

+0

好的电话,谢谢! – davidosomething 2010-04-16 21:00:18

1

模块的/ contrib和/ custom子文件夹很好。对于D7,特别是如果您使用实体,您应该禁用模块,移动它们然后重新启用。有用。

替代方案,将模块移到子文件夹并清除缓存,有时不起作用并可能生成WSOD。

20

最多D6的Drupal版本在系统表中保留了模块位置,但从D7开始,有多处记录路径的地方(例如注册表和registry_file表),所以只需移动文件夹并清除缓存就不会这样做,很可能会导致重大问题。

的一系列步骤,你可以尝试:

  1. 备份数据库
  2. 入住你的代码版本控制
  3. 运行以下查询:

    更新系统 SET文件名= REPLACE(文件名,'sites/all/modules','sites/all/modules/contrib'); SET文件名= REPLACE(文件名,'sites/all/modules','sites/all/modules/contrib');

    UPDATE registry_file SET文件名= REPLACE(文件名, '位点/所有/模块', '位点/所有/模块/的contrib')

  4. 移动文件夹

  5. 执行命令drush cc all
+0

当(5)给出错误(上下文给出错误)时,尝试截断所有缓存%表 – filsterjisah 2012-05-03 12:44:04

0

如果您事后清除缓存(drush cc all),则可以安全地移动大部分模块。

但是,一些模块,特别是ctools,在系统表或缓存以外的地方存储文件路径信息。您可能不得不将这些模块留在原来的位置,但仍然可以移动其他所有模块。

3

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文件夹,清除你的缓存,你很好走。

1

使用http://drupal.org/project/registry_rebuild “注册表重建也将重建的系统表,以获得在该模块正确的地方,所以你可以引导。“

  • 备份数据库
  • 上传的 '模块'
  • 感动了所有模块
  • 运行脚本的网站/所有/模块/ registry_rebuild/registry_rebuild.php
  • 重新加载该网站
  • 如果你得到一个错误清除浏览器缓存,并且所有的都重新工作
1

其实你只需要做系统表的更新,然后执行以下操作:

drush RR

,也许..

drush cc的所有

drush RR

+0

是 - 这是对此问题的2015答案 – ErichBSchulz 2015-01-01 02:20:15