Drupal 8中缓存重建后缺少路由

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

有一个名为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] 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