将 Drush 8 升级到 9 站点别名不起作用

Posted

技术标签:

【中文标题】将 Drush 8 升级到 9 站点别名不起作用【英文标题】:Upgraded Drush 8 to 9 Site Alias Not Working 【发布时间】:2020-10-12 21:12:50 【问题描述】:

我从使用 Docksal 转移到 Acquia ADS (Lando),它自动将我的 Drush 从 8 升级到 9。我的本地站点运行良好,但我无法让 Drush 9 “看到”我的 Drupal 8 站点。别名似乎已创建并添加到 drush/sites 文件夹中,并且运行 drush site:alias 确实显示了它们。但是运行 drush 状态将我的 Drupal 根显示为 /app。我的 Drupal 根目录是 /app/docroot。我的别名文件确实以此为根(对于本地)。我不确定为什么 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() 在 /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() 在 /app/vendor/symfony/console/Application.php:255 Symfony\Component\Console\Application->doRun() 在 /app/vendor/symfony/console/Application.php:148 Symfony\Component\Console\Application->run() 在 /app/vendor/drush/drush/src/Runtime/Runtime.php:118 Drush\Runtime\Runtime->doRun() 在 /app/vendor/drush/drush/src/Runtime/Runtime.php:49 Drush\Runtime\Runtime->run() 在 /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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢!就是这么简单。 哇,谢谢!永远不会想到这一点。我不明白,但我不在乎。 自从这个问题得到回答已经一年多了,有谁知道这是否已经记录在任何地方了吗?【参考方案2】:

我意识到这是一个较老的问题,但是随着 Drupal 8 最近即将结束生命周期,而且由于客户已经意识到使用 EOL 软件的风险,很多人(比如我自己)很可能会争先恐后地升级,我希望花点时间解释为什么@r00t 的答案有效。

r00t 是正确的,更改 composer.json 中的 "name" 值修复了问题,但是,设置的值不限于 drupal-composer/drupal-project。这似乎源于包webflo/drupal-finder 及其工作方式。

webflow/drupal-finderdrush/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,则使用来自@987654335 的值@ 查找站点安装。

我仍然不知道这是否记录在 webflo/drupal-finderdrush/drush 的任何地方,但了解它为什么会成为一个问题对我有很大帮助。

TL;DR:

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

【讨论】:

以上是关于将 Drush 8 升级到 9 站点别名不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 升级后 Jackson 序列化不起作用

将tomcat 7升级到8后检票口登录不起作用

找不到包裹 drush/drush

drupal 8 如何安装 drush 9

将站点重定向到https后,站点IP重定向不起作用

使用 Storybook/vue 时别名不起作用