Drupal hook_menu没有重新评估

时间:2015-02-04 14:59:47

标签: php drupal drupal-7

我最近在暂存网站上部署了一个更新,我完全无法让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是违规项目。

1 个答案:

答案 0 :(得分:0)

好的问题解决了。在menu_rebuild()中有一个事务回滚try / catch,并且在menu_rebuild()期间发生了一个错误,该错误暴露了备份和迁移模块的模式丢失的问题。这是由于生产工程师将备份和迁移模块部署到生产中,而不是将其提供给上游。 不知何故,备份和迁移模块被标记为已启用,即使尚未在暂存时创建模式。仍然很神秘,但卸载/重新安装模块允许menu_rebuild()成功完成。