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 中的 host
从 localhost
更改为 127.0.0.1
,但由于 settings.php 文件是由 ddev 在配置期间生成的,host
实际上是 db
,将其更改为任何内容都会导致站点中断。
在最新版本的 ddev 中有两种方法 运行 drush。
最有可能奏效的方法是 运行 在容器内执行 drush 命令。
ddev ssh
和 drush cr
要么
ddev exec drush cr
您 可以 也 运行 使用 ddev 在主机上运行。如果您在项目目录中并且在主机上安装了 drush 8,则可以使用 drush sql-cli
和 drush 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。
刚刚使用 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 中的 host
从 localhost
更改为 127.0.0.1
,但由于 settings.php 文件是由 ddev 在配置期间生成的,host
实际上是 db
,将其更改为任何内容都会导致站点中断。
在最新版本的 ddev 中有两种方法 运行 drush。
最有可能奏效的方法是 运行 在容器内执行 drush 命令。
ddev ssh
和 drush cr
要么
ddev exec drush cr
您 可以 也 运行 使用 ddev 在主机上运行。如果您在项目目录中并且在主机上安装了 drush 8,则可以使用 drush sql-cli
和 drush 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。