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



我从使用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-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则使用extra.installer-paths中的值来查找站点安装。

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

TL;博士:

如果您站点的 docroot 位于您的vendor文件夹旁边,请将composer.json中的名称更改为未drupal/drupal的任何内容。 如果您的vendor文件夹位于文档根中,则drupal/drupal将为您工作。

相关内容

  • 没有找到相关文章

最新更新