我从使用Docksal转移到Acquia ADS(Lando(,它自动将我的Drush从8升级到9。我的本地网站运行良好,但我无法让 Drush 9 "看到"我的 Drupal 8 网站。别名似乎已被创建并添加到 drush/sites 文件夹中,并且运行 drush site:alias 确实显示了它们。但是,运行 drush 状态显示我的 Drupal 根为/app。我的Drupal根是/app/docroot。我的别名文件确实将其作为根目录(用于本地(。我不确定为什么 Drush 不使用它知道的别名文件。我试过:
drush @self(或@local(列表,我得到一些命令,最后有以下语句:
[注意] 未找到 Drupal 根。传递 --root 或 @siteAlias 以查看特定于 Drupal 的命令。
做 drush @local(或 @self( cr 返回:
在 BootstrapHook 中.php第 32 行:引导失败。运行您的命令 与 -vvv 了解更多信息。
使用 -vvv:
异常跟踪:在/app/vendor/drush/drush/src/Boot/BootstrapHook.php:32 drush\Boot\BootstrapHook->initialize(( at/app/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:34 Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->callInitializeHook(( 在/app/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:27 Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->initialize(( 在/app/vendor/consolidation/annotated-command/src/CommandProcessor.php:145 Consolidation\AnnotatedCommand\CommandProcessor->initializeHook(( at/app/vendor/consolidation/annotated-command/src/AnnotatedCommand.php:289 Consolidation\AnnotatedCommand\AnnotatedCommand->initialize(( at/app/vendor/symfony/console/Command/Command.php:221 Symfony\Component\Console\Command\Command->run(( at/app/vendor/symfony/console/Application.php:1005 Symfony\Component\Console\Application->doRunCommand(( at/app/vendor/symfony/console/Application.php:255 Symfony\Component\Console\Application->doRun(( at/app/vendor/symfony/console/Application.php:148 Symfony\Component\Console\Application->run(( at/app/vendor/drush/drush/src/Runtime/Runtime.php:118 Drush\Runtime\Runtime->doRun(( at/app/vendor/drush/drush/src/Runtime/Runtime.php:49 drush\Runtime\Runtime->run(( at/app/vendor/drush/drush/drush.php:72 require(( at/app/vendor/drush/drush/drush:4
冲刺状态:
PHP binary : /usr/local/bin/php
PHP config :
PHP OS : Linux
Drush script : /app/vendor/drush/drush/drush
Drush version : 10.2.2 <-- Had 9.0.0 but currently trying 10, same issue
Drush temp : /tmp
Drush configs : /root/.drush/drush.yml
/app/vendor/drush/drush/drush.yml
/app/drush/drush.yml
Drupal root : /app
self.site.yml:
local:
root: /app/docroot
uri: example.lndo.site
有人可以指出我正确的方向吗?
想通了。无论你尝试用多少种方式告诉Drush在哪里可以找到你的Drupal根,在你编辑composer.json文件之前,这一切都无关紧要。事实证明,使Drush 9+工作的关键是更改作曲家的名称。 我的 composer.json 文件名来自: "名称": "drupal/drupal", 自: "名称": "Drupal-composer/drupal-project",
我不认为此功能在任何地方都有记录,所以我在这里发布它是为了回答我自己的问题,以防这对其他人有所帮助。
我意识到这是一个较老的问题,但是随着Drupal 8最近达到生命周期的终点,并且许多人(像我一样(争先恐后地升级的可能性很高,因为客户已经意识到使用EOL软件的风险,我想花点时间解释为什么@r00t的答案有效。
r00t 是正确的,更改"name"
值composer.json
解决了问题,但是,设置的值不限于drupal-composer/drupal-project
. 这似乎源于一揽子webflo/drupal-finder
及其工作方式。
webflow/drupal-finder
是drush/drush
的要求,因此即使您没有手动添加它,它也将被包括在内。这也是您可能已经安装或可能没有安装的其他几个要求,例如palantirnet/drupal-rector
(作为旁注,这对此次升级非常有帮助(。
在drupal-finder
的代码中,有一个方法,它根据composer.json
文件中的几个项目查找 Drupal 核心的安装路径。
这是来自DrupalFinder的代码::isValidRoot((
foreach ($json['extra']['installer-paths'] as $install_path => $items) {
if (in_array('type:drupal-core', $items) ||
in_array('drupal/core', $items) ||
in_array('drupal/drupal', $items)) {
$this->composerRoot = $path;
// @todo: Remove this magic and detect the major version instead.
if (($install_path == 'core') || ((isset($json['name'])) && ($json['name'] == 'drupal/drupal'))) {
$install_path = '';
} elseif (substr($install_path, -5) == '/core') {
$install_path = substr($install_path, 0, -5);
}
....
这告诉drupal-finder
,如果"name"
值drupal/drupal
则站点的安装路径位于项目的基础,但是如果不drupal/drupal
则使用extra.installer-paths
中的值来查找站点安装。
我仍然不知道这是否记录在webflo/drupal-finder
或drush/drush
的任何地方,但了解为什么这是一个问题对我有很大帮助。
TL;博士:
如果您站点的 docroot 位于您的vendor
文件夹旁边,请将composer.json
中的名称更改为未drupal/drupal
的任何内容。 如果您的vendor
文件夹位于文档根中,则drupal/drupal
将为您工作。