有一个名为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.
我正在使用drush 9.6.2和Drupal 8.6.15
我还打开了一个issue on Drupal.org
答案 0 :(得分:1)
这实际上是当前正在解决的核心错误Extensions in Multisite Directories Not Registered When Rebuilding Cache 。那里的补丁可以解决该问题。
答案 1 :(得分:0)
您命令中的-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)
也就是说,只要定义好别名 @ stewardd8.test ,就不必立即指定它,这意味着至少这2个选项会出现在相应的站点别名定义中:
test:
root: /path/to/stewardd8
uri: http://example.com
正确设置这些选项后,您可以运行drush status
并检查输出:
$ drush @stewardd8.test status
Drupal version : 8.6.14
Site URI : http://example.com # <- as expected
但是,如果您用-l phys
覆盖站点URI,则可能无法按预期进行:
$ drush @stewardd8.test -l phys status
Drupal version : 8.6.14
Site URI : phys # <- invalid
因此,我建议您在进一步研究之前开始修复此问题。另外,您还可以添加-v, --verbose
选项,以使草稿更加罗word,例如drush -v @stewardd8.test cr
。
然后,如果它不能解决缺少的路由问题,我将仔细检查Drupal / PHP / SQL日志(按此顺序),尤其是在运行cache rebuild命令时。