Drupal 8中缓存重建后缺少路由
有一个名为phys_custom的模块,它定义了一个路由,phys_custom.homepage(/homepage),它工作正常,直到我清除缓存,此时它不再可用 看看下面的输出。现在,每次清除缓存时,我都需要卸载并重新安装模块。我将如何调试这个Drupal 8中缓存重建后缺少路由,drupal,drupal-8,Drupal,Drupal 8,有一个名为phys_custom的模块,它定义了一个路由,phys_custom.homepage(/homepage),它工作正常,直到我清除缓存,此时它不再可用 看看下面的输出。现在,每次清除缓存时,我都需要卸载并重新安装模块。我将如何调试这个 $ drush @stewardd8.test -l phys cr [success] Cache rebuild complete. $ drush @stewardd8.test -l phys pmu phys_custom [success
$ drush @stewardd8.test -l phys cr
[success] Cache rebuild complete.
$ drush @stewardd8.test -l phys pmu phys_custom
[success] Successfully uninstalled: phys_custom
$ drush @stewardd8.test -l phys pm:enable phys_custom
[success] Successfully enabled: phys_custom
$ drush @stewardd8.test -l phys ev 'print_r(drupal_get_path("module", "phys_custom") . PHP_EOL)'
sites/phys/modules/phys_custom
$ drush @stewardd8.test -l phys ev 'print_r(\Drupal\Core\Url::fromRoute("phys_custom.homepage")->toString() . PHP_EOL)'
/homepage
$ drush @stewardd8.test -l phys cr
[success] Cache rebuild complete.
$ drush @stewardd8.test -l phys ev 'print_r(drupal_get_path("module", "phys_custom") . PHP_EOL)'
sites/phys/modules/phys_custom
$ drush @stewardd8.test -l phys ev 'print_r(\Drupal\Core\Url::fromRoute("phys_custom.homepage")->toString() . PHP_EOL)'
In RouteProvider.php line 201:
Route "phys_custom.homepage" does not exist.
我正在使用Drush9.6.2和Drupal8.6.15
我还打开了一个此
-l phys
部分,您的命令可能是问题的原因
Drush-l
选项的目的是在多站点安装中以特定站点为目标,它需要一个URI:
-l <uri> , --uri=<uri> URI of the Drupal site to use.
The value of --uri should always be the same as when
the site is being accessed from a web browser (e.g. http://example.com)
正确设置这些选项后,您可以运行drush status
并检查输出:
$ drush @stewardd8.test status
Drupal version : 8.6.14
Site URI : http://example.com # <- as expected
所以我建议你在进一步挖掘之前开始修复这个。您还可以添加-v,--verbose
选项,使drush更加冗长,例如drush-v@stewardd8.test cr
然后,如果它没有修复丢失的路由问题,我将仔细检查Drupal/PHP/SQL日志(按顺序),尤其是在运行cache-rebuild命令时 这实际上是目前正在研究的一个核心bug。那里的补丁修复了这个问题。谢谢,尽管-l通常接受URL,但如果在./sites/sites.php中定义了字符串,那么它也会接受字符串,
$sites['example.com']=“phys”
,它允许我们使用同一个多站点目录定义多个站点(在本例中为“phys”),因此事实证明这不是问题所在,请参见我的上面的答案,这是一个核心错误造成的。@alberto56我不知道多站点的drush-l功能,感谢您的澄清!(虽然我注意到,即使在./sites/sites.php中注册了“phy”,drush status也会将“phy”输出为站点URI,但这是误导性的,但drush正确引导了站点-drush 8.x)
$ drush @stewardd8.test status
Drupal version : 8.6.14
Site URI : http://example.com # <- as expected
$ drush @stewardd8.test -l phys status
Drupal version : 8.6.14
Site URI : phys # <- invalid