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

SQLSTATE[HY000][2002]Drush命令不起作用-DDEV香草Drupal 8安装,drush,ddev,Drush,Ddev,刚刚使用ddev创建了一个新的Drupal8安装,但是,我在drush方面遇到了问题。每当我运行命令drush cr时,它都会返回错误: [error] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known 如果我使用--debug标志运行命令drush en admin_toolbar,它将返回错误: [error

刚刚使用ddev创建了一个新的Drupal8安装,但是,我在drush方面遇到了问题。每当我运行命令
drush cr
时,它都会返回错误:

 [error]  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
如果我使用
--debug
标志运行命令
drush en admin_toolbar
,它将返回错误:

 [error]  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
Executing:mysql--defaults file=/private/tmp/drush_ty1hL4--database=db--host=db--port=3306--silent

[Symfony\Component\Console\Exception\CommandNotFoundException]
未找到命令pm:enable。Drush无法查询数据库。


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

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

最可能的工作方式是在容器内运行drush命令

ddev-ssh
drush-cr
ddev exec drush cr

您还可以使用ddev在主机上运行drush。如果您在项目目录中,并且在主机上安装了drush 8,那么像
drush sql cli
drush uli
这样的命令“只需工作”。您的里程可能会有所不同

不过,对于drush的一般用法,特别是Drupal8和Drush9+,有几点需要注意:

  • Drush9+永远不能全局安装,它总是使用composer在每个项目中安装
  • 根据drush项目的建议,容器中的global/usr/local/bin/drush实际上是“drush启动器”。它首先尝试使用本地composer安装的drush站点。如果不存在或找不到,drush launcher将使用/usr/local/bin/drush8,即容器中drush8的全局安装
  • 我肯定知道非常有经验和著名的Drupal 8开发人员从不依赖drush launcher,他们会在容器内(或主机上的
    ddev exec/var/www/html/vendor/bin/drush sql cli
    运行drush命令,以获得所需的确切站点本地drush

我在这里找到了更多信息:
ddev-exec
只是
docker-exec
上的一个包装器,但它为您完成了所有提升。请注意,在正确设置了Drush8的主机系统上,如果在项目目录中执行,许多drush命令也可以在主机上工作。我将编辑答案以反映这一点。