我一直在寻找这个问题的答案,一点也不走运。根据我在数据库结构中所观察到的,到模块的位置是在“system”表中指定的。我唯一的解决方案是编写一个SQL查询来更新'filename‘列。
是否有更好的/更清洁的解决方案来解决这个问题,例如,一个控制模块?
发布于 2011-12-16 11:57:29
您只需要将模块移动到您的新位置并重新构建regisry。当注册表重新构建时,将更新到模块的路径。检查registry_rebuild()。
Rescan所有代码在模块中或包括目录,存储每个接口或类在数据库中的位置。
不过,我建议您在测试之前备份数据库。
如果使用drush,还可以使用以下命令重新构建注册表:
drush cc registry您还可以为drush安装registry_rebuild命令:
// install registry_rebuild
drush dl registry_rebuild
// rebuild the registry
drush rr发布于 2011-12-17 15:13:54
试试Mark的酷工具:钻孔改造工程路径。它使整个过程自动化,对我很有帮助。当然使用钻地。
不过,我会支持这样的建议,即您可以在站点数据库的副本上尝试此操作。
发布于 2012-12-28 22:50:10
我在本地从生产中恢复了一个备份,尝试只移动东西,点击管理/模块,或者运行registry_rebuild(),但是它并没有阻止抛出致命的错误。这对我来说很有意义,因为有些模块可能在它们的hook_init()中使用include或任何东西,或者您可能有依赖于模块的菜单路由器路径集,或者是Drupal在引导中找不到的包含。最终,这就是我所做的(你的道路可能是不同的):
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');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_%';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%';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,并清除缓存,从而重建菜单路径。
https://drupal.stackexchange.com/questions/17657
复制相似问题