SQLSTATE[HY000] [2002] Drush 命令不起作用 - DDEV 香草 Drupal 8 安装

SQLSTATE[HY000] [2002] Drush commands not working - DDEV vanilla Drupal 8 install

刚刚使用 ddev 创建了一个新的 Drupal 8 安装,但是,我遇到了 drush 问题。每当我 运行 命令 drush cr 它 returns 错误:

 [error]  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known

如果我 运行 命令 drush en admin_toolbar 带有 --debug 标记它 returns 错误:

Executing: mysql --defaults-file=/private/tmp/drush_ty1hL4 --database=db --host=db --port=3306 --silent < /private/tmp/drush_OSFtCb ERROR 2005 (HY000): Unknown MySQL server host 'db' (0)

[Symfony\Component\Console\Exception\CommandNotFoundException] Command pm:enable was not found. Drush was unable to query the database.

关于此问题,我能找到的唯一解决方案是将 settings.php 中的 hostlocalhost 更改为 127.0.0.1,但由于 settings.php 文件是由 ddev 在配置期间生成的,host 实际上是 db,将其更改为任何内容都会导致站点中断。

在最新版本的 ddev 中有两种方法 运行 drush。

最有可能奏效的方法是 运行 在容器内执行 drush 命令。

ddev sshdrush cr 要么 ddev exec drush cr

可以 也 运行 使用 ddev 在主机上运行。如果您在项目目录中并且在主机上安装了 drush 8,则可以使用 drush sql-clidrush uli "just work" 这样的命令。您的里程可能会有所不同。

不过,关于 drush 的一般使用有几点需要注意,尤其是 Drupal 8 和 drush 9+:

  • drush 9+ 永远无法全局安装,它总是使用 composer 按项目安装。
  • 按照drush项目的推荐,容器内部的全局/usr/local/bin/drush其实是"drush launcher"。它首先尝试使用站点本地作曲家安装的 drush。如果不存在或找不到,drush 启动器将使用 /usr/local/bin/drush8,容器内 drush 8 的全局安装。
  • 我绝对认识非常有经验和著名的 Drupal 8 开发人员,他们从不依赖 drush 启动器,他们会 运行 drush 命令,例如容器内的 vendor/bin/drush sql-cli(或容器上的 ddev exec /var/www/html/vendor/bin/drush sql-cli主机)以获得他们想要的确切站点本地 drush。