将 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-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
,则使用来自@987654335 的值@ 查找站点安装。
我仍然不知道这是否记录在 webflo/drupal-finder
或 drush/drush
的任何地方,但了解它为什么会成为一个问题对我有很大帮助。
TL;DR:
如果您网站的 docroot 位于您的 vendor
文件夹旁边,请将 composer.json
中的名称更改为除 drupal/drupal
之外的任何名称。如果您的 vendor
文件夹位于您的 docroot 中,drupal/drupal
将为您工作。
【讨论】:
以上是关于将 Drush 8 升级到 9 站点别名不起作用的主要内容,如果未能解决你的问题,请参考以下文章