我最近在暂存网站上部署了一个更新,我完全无法让hook_menu()
重新评估。钩子在更新之前就已存在并且提供了一个项目。在更新之后,它应该提供2个项目,但无论我无法解决这个问题。
新代码在我的Ubuntu / LAMP的本地开发环境中运行良好,但是登台平台是IIS7 / PHP FastCGI。
我尝试通过sys> dev>性能,管理员菜单提供的各种链接,cache_clear_all()
中的drupal_flush_all_caches()
和index.php
来清除缓存。
我已尝试停止/启动/重新启动IIS。
据phpinfo()
所述,似乎没有任何正在运行的操作码缓存,没有相关的“缓存”或“apc”。
我已经在die()
代码中添加了mymodule_menu()
个命令,似乎钩子根本没有触发。 menu_router表不会收到任何新条目,但它会保留以前存在的单个菜单项。
我知道模块正在运行,因为我可以将die()
放入先前存在的菜单项的页面回调中并且它会杀死PHP。
我也知道新的钩子已被评估为同样的代码更新提供了一个mymodule_page_alter()
钩子,它成功触发。
开始到达我的系绳的尽头!我还能尝试什么?
编辑:
我做的另一件事是证明mymodule_hook()
被正确命名。我通过PHP过滤器运行<?php print_r(mymodule_menu()); ?>
并按预期输出菜单项数组。
编辑:
此外,我只是通过PHP过滤器尝试<?php print_r(module_implements('menu')); ?>
,我可以在数组中看到mymodule
。
编辑:
我的hook_menu
实施:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['google-search'] = array(
'page callback' => 'mymodule_google_search_page',
'access callback' => TRUE,
'title' => 'Search Results'
);
$items['mymodule-header-footer'] = array(
'page callback' => 'mymodule_header_footer',
'access callback' => TRUE,
'title' => 'Header and Footer'
);
return $items;
}
从上面/google-search
开始工作并继续工作。 /mymodule-header-footer
是违规项目。
答案 0 :(得分:0)
好的问题解决了。在menu_rebuild()中有一个事务回滚try / catch,并且在menu_rebuild()期间发生了一个错误,该错误暴露了备份和迁移模块的模式丢失的问题。这是由于生产工程师将备份和迁移模块部署到生产中,而不是将其提供给上游。 不知何故,备份和迁移模块被标记为已启用,即使尚未在暂存时创建模式。仍然很神秘,但卸载/重新安装模块允许menu_rebuild()成功完成。