SQLSTATE [HY000] [2002] Команды Drush не работают - установка DDEV vanilla Drupal 8

Только что создал новую установку Drupal 8 с помощью ddev, однако у меня проблемы с 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 с localhost на 127.0.0.1, но поскольку файл settings.php был сгенерирован ddev во время настройки, host на самом деле db и изменение его на что угодно вызывает сайт сломать.


person mlemon    schedule 02.06.2018    source источник


Ответы (1)


В последних версиях ddev есть два способа запустить drush.

Наиболее вероятный способ работы - запускать команды drush внутри контейнера.

ddev ssh и drush cr или ddev exec drush cr

Вы также можете запустить drush на хосте с помощью ddev. Если вы находитесь в каталоге проекта и на хосте установлен drush 8, команды типа drush sql-cli и drush 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, они запускают команды drush, такие как vendor/bin/drush sql-cli внутри контейнера (или ddev exec /var/www/html/vendor/bin/drush sql-cli на хосте), чтобы получить точную локальную программу drush, которую они хотят.
person rfay    schedule 02.06.2018
comment
Я нашел дополнительную информацию по этому поводу здесь: phase2.github. io / devtools / common-tasks / ssh-into-a-container. - person Anon; 14.12.2019
comment
ddev exec - это просто оболочка для docker exec, но она делает всю работу за вас. Обратите внимание, что в хост-системе, которая правильно настроена с помощью drush 8, многие команды drush также работают на хосте, если они выполняются в каталоге проекта. Я отредактирую ответ, чтобы отразить это. - person rfay; 14.12.2019