0

我从使用 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(or @local) 列表,最后我得到一些命令和这个语句:

[注意] 未找到 Drupal 根目录。通过 --root 或 @siteAlias 以查看 Drupal 特定的命令。

做 drush @local(or @self) cr 返回:

在 BootstrapHook.php 第 32 行:引导失败。使用 -vvv 运行命令以获取更多信息。

使用 -vvv:

异常跟踪:在 /app/vendor/drush/drush/src/Boot/BootstrapHook.php:32 Drush\Boot\BootstrapHook->initialize() 在 /app/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ InitializeHookDispatcher.php:34 Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->callInitializeHook() at /app/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php:27 Consolidation\AnnotatedCommand\Hooks\Dispatchers\ InitializeHookDispatcher->initialize() at /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:4255 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 要求()在 /app/vendor/drush/drush/drush:4255 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 要求()在 /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

有人可以指出我正确的方向吗?

4

2 回答 2

6

弄清楚了。无论您尝试用多少种方法告诉 Drush 在哪里寻找您的 Drupal 根目录,在您编辑 composer.json 文件之前,这些都不重要。事实证明,使 Drush 9+ 工作的关键是更改 composer 中的名称。我的 composer.json 文件名从:“name”:“drupal/drupal”,到:“name”:“drupal-composer/drupal-project”,

我认为此功能没有在任何地方记录,因此我将其发布在这里以回答我自己的问题,以防万一这对其他人有所帮助。

于 2020-07-11T16:40:23.203 回答
0

我意识到这是一个较老的问题,但是随着 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是一个方法,它根据文件中的一些项目来查找 Drupal 核心的安装路径composer.json

这是 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则使用值 fromextra.installer-paths来查找站点安装。

我仍然不知道这是否记录在 anywebflo/drupal-finder或 in 的任何地方drush/drush,但理解它为什么是一个问题对我有很大帮助。

TL;博士:

如果您网站的 docroot位于您的vendor文件夹旁边,请将名称更改composer.json为任何不是drupal/drupal. 如果您的vendor文件夹位于您的 docroot 中,drupal/drupal它将为您工作。

于 2021-11-10T16:12:07.140 回答