2

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

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

如果我drush en admin_toolbar使用--debug标志运行命令,它会返回错误:

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.

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

4

1 回答 1

1

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

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

ddev sshdrush crddev exec drush cr

可以使用 ddev 在主机上运行 drush。如果您在项目目录中并且在主机上安装了 drush 8,则类似drush sql-clidrush uli正常工作”的命令。你的旅费可能会改变。

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

  • drush 9+ 永远不能全局安装,它总是使用 composer 在每个项目中安装。
  • 按照 drush 项目的建议,容器内部的全局 /usr/local/bin/drush 实际上是“drush 启动器”。它首先尝试使用站点本地作曲家安装的 drush。如果不存在或找不到,drush 启动器将使用 /usr/local/bin/drush8,容器内的 drush 8 的全局安装。
  • 我绝对认识非常有经验和著名的 Drupal 8 开发人员,他们从不依赖 drush 启动器,他们会像vendor/bin/drush sql-cli在容器内(或ddev exec /var/www/html/vendor/bin/drush sql-cli主机上)一样运行 drush 命令来获得他们想要的确切的站点本地 drush。
于 2018-06-02T22:50:01.337 回答