代码之家  ›  专栏  ›  技术社区  ›  davidosomething

Drupal-移动模块文件夹

  •  14
  • davidosomething  · 技术社区  · 15 年前

    移动我的模块安全吗

    • 站点/所有/模块/
    • 站点/所有/模块/控制器 站点/所有/模块/自定义

    在生产现场?

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

    10 回复  |  直到 15 年前
        1
  •  3
  •   McAden    15 年前

    如果你移动一个模组,Drupal会看到旧的模组坏了,一个新的模组存在。它不会假设这两个是同一件事-简单地移动。

        2
  •  21
  •   YakovL Naresh Kumar Nakka    7 年前

    到d6的Drupal版本在系统表中保留了模块位置,但从d7开始,有多个位置记录了路径(例如 registry registry_file 表)因此,仅仅移动文件夹和清除缓存不会做到这一点,很可能会导致严重的问题。

    您可以尝试的一系列步骤:

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

      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')
      
    4. 移动文件夹

    5. 运行: drush cc all
        3
  •  3
  •   Charlie Schliesser    12 年前

    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-更新所有“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%';
    

    步骤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 文件夹,清空你的缓存,你就可以走了。

        4
  •  2
  •   googletorp    15 年前

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

        5
  •  2
  •   Sumeet Pareek    12 年前

    如果您在D7上,那么这个Drupal文档页面是继续移动模块的最佳方法。- How to move modules and themes

        6
  •  1
  •   trimax    13 年前

    最好为模块提供/contrib和/custom子文件夹。对于D7,特别是使用实体时,应该禁用模块,移动它们,然后重新启用。它起作用了。

    或者,将模块移动到子文件夹并清除缓存,有时不起作用,可能会生成wsod。

        7
  •  1
  •   jorisx    12 年前

    使用 http://drupal.org/project/registry_rebuild “注册表重建还将重建系统表,以使模块位于正确的位置,以便您可以引导。”

    • 备份数据库
    • 已上载“模块”
    • 移动了所有模块
    • 运行脚本sites/all/modules/registry_rebuild/registry_rebuild.php
    • 重新加载网站
    • 如果出现错误,请清除浏览器缓存,所有缓存都将重新工作。
        8
  •  1
  •   drupalastic    11 年前

    更改模块文件夹后,不要忘记使用此模块:

    https://drupal.org/project/registry_rebuild

        9
  •  1
  •   YakovL Naresh Kumar Nakka    7 年前

    实际上,您只需要对系统表进行更新,然后执行以下操作:

    drush rr 
    

    也许……

    drush cc all
    
    drush rr
    
        10
  •  0
  •   donquixote    13 年前

    如果以后清除缓存(drushcall),可以安全地移动大多数模块。

    然而 一些模块,尤其是ctools,将文件路径信息存储在系统表或缓存以外的位置。您可能需要将这些模块保留在其原始位置,但您仍然可以移动其他所有模块。