首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将已安装的模块从/sites/all/ modules /*移动到/sites/all/cont肋骨/modules/*

如何将已安装的模块从/sites/all/ modules /*移动到/sites/all/cont肋骨/modules/*
EN

Drupal用户
提问于 2011-12-16 10:50:55
回答 13查看 11.5K关注 0票数 34

我一直在寻找这个问题的答案,一点也不走运。根据我在数据库结构中所观察到的,到模块的位置是在“system”表中指定的。我唯一的解决方案是编写一个SQL查询来更新'filename‘列。

是否有更好的/更清洁的解决方案来解决这个问题,例如,一个控制模块?

EN

回答 13

Drupal用户

回答已采纳

发布于 2011-12-16 11:57:29

您只需要将模块移动到您的新位置并重新构建regisry。当注册表重新构建时,将更新到模块的路径。检查registry_rebuild()

Rescan所有代码在模块中或包括目录,存储每个接口或类在数据库中的位置。

不过,我建议您在测试之前备份数据库。

如果使用drush,还可以使用以下命令重新构建注册表:

代码语言:javascript
复制
drush cc registry

您还可以为drush安装registry_rebuild命令:

代码语言:javascript
复制
// install registry_rebuild
drush dl registry_rebuild
// rebuild the registry
drush rr
票数 28
EN

Drupal用户

发布于 2011-12-17 15:13:54

试试Mark的酷工具:钻孔改造工程路径。它使整个过程自动化,对我很有帮助。当然使用钻地

不过,我会支持这样的建议,即您可以在站点数据库的副本上尝试此操作。

票数 10
EN

Drupal用户

发布于 2012-12-28 22:50:10

我在本地从生产中恢复了一个备份,尝试只移动东西,点击管理/模块,或者运行registry_rebuild(),但是它并没有阻止抛出致命的错误。这对我来说很有意义,因为有些模块可能在它们的hook_init()中使用include或任何东西,或者您可能有依赖于模块的菜单路由器路径集,或者是Drupal在引导中找不到的包含。最终,这就是我所做的(你的道路可能是不同的):

步骤1:将sites/all/模块替换为sites/all/

代码语言:javascript
复制
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');

步骤2:将站点/所有/模块/配置替换为站点/所有/模块/自定义的自定义命名空间模块

代码语言:javascript
复制
UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE filename LIKE '%my_custom_namespace_%';

步骤3:将dev模块移动到站点/all/ modules /dev

代码语言:javascript
复制
UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE filename LIKE '%devel%';

步骤4:清除缓存,以便正确引导

代码语言:javascript
复制
TRUNCATE TABLE cache
TRUNCATE TABLE cache_bootstrap
TRUNCATE TABLE cache_menu
TRUNCATE TABLE cache_page
TRUNCATE TABLE cache_path

注意:如果您使用自定义模块或像LoginToboggan这样的控件来处理403 (访问被拒绝),并且在此过程中被注销,您可能需要更新menu_roter表中的include_file列,以使用包含文件的新路径。这可能是一次罕见的事件。

UPDATE menu_router SET include_file = 'sites/all/modules/custom/my_custom_namespace/includes/foo.inc' WHERE path = 'access-denied'

一旦这些查询运行(只需一秒),就可以启动admin/config/development/performance,并清除缓存,从而重建菜单路径。

票数 10
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/17657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档