Агрегация drush-алиасов

mbaev 17.05.2017, 15:55

drushКто-то уже перешел на Drupal console , а я по-старинке использую Drush и Drush-алиасы , которые очень полезны при работе с несколькими окружениями.

Описание drush-алиасов, достойно отдельной темы, но если коротко, то основная функция алиасов - проксирование команд.
Проще говоря, если у Вас есть сайт "рога-копыта.рф" (например, алиас: rk) с четырьмя окружениями local, dev, test и prod, то вы можете создать алиасы, чтобы очистка кэша на всех окружениях не была болью, а выполнялась в четыре команды:

  1. drush @rk.local cc all
  2. drush @rk.dev cc all
  3. drush @rk.test cc all
  4. drush @rk.prod cc all

Об агрегации

Агрегация или объединение алиасов позволяет проксировать комманды сразу на несколько окружений. Предыдущий пример можно объединить в дополнительный алиас all и выполнять команды, используя его.

  1. drush @rk.all cc all -y

Флаг -y, говорит о том, что Вы заранее отвечаете "Да" на все будущие вопросы в течении выполнения команды.

Будьте внимательны! Рекомендую использовать алиас агрегации только при запуске безопасных команд.

Так будет получен следующий вывод:

  1. $ drush @rk.all cc all -y
  2. You are about to execute 'cc all' non-interactively (--yes forced) on all of the following targets:
  3.   @rk.local
  4.   @rk.dev
  5.   @rk.test
  6.   @rk.prod
  7. Continue?  (y/n): y
  8. rk.local >> 'all' cache was cleared in rk.local                                            [success]
  9. rk.dev   >> 'all' cache was cleared in rk.dev                                              [success]
  10. rk.test  >> 'all' cache was cleared in rk.test                                             [success]
  11. rk.prod  >> 'all' cache was cleared in rk.prod                                             [success]

Здóрово правда?

Пример файла агрегации:

  1. <?php
  2.  
  3. // Алиасы для окружений.
  4. // ...
  5.  
  6. // Агрегация алиасов.
  7. $aliases['all'] = array(
  8.   'site-list' => array('@rk.local', '@rk.dev', '@rk.test', '@rk.prod')
  9. );

Все это кладём в папку ~/.drush (или C:\Users\<имя пользователя>\.drush для Windows) с именем rk.aliases.drushrc.php и можно пользоваться.

Бонус

Второй вариант использования агрегационных алиасов - проксирование команд на разные сайты одного окружения.

Предположим, у вас есть некоторое количество сайтов на поддержке с local, dev, test и prod окружениями. Конечно, их необходимо периодически обновлять. Так, если у Вас будет 4 сайта, то всего придётся выполнить обновление 16 раз. Не очень приятная процедура, даже с использование drush.

Здесь, затея с объединением алиасов по сайтам имеет мало смысла, т.к. обновлять local, dev, test и тем более prod окружения опасно. В данном случае, необходимо выполнить объединение алиасов сайтов по окружениям. Например, так:

  1. @my-sites.local
  2. @my-sites.dev
  3. @my-sites.test
  4. @my-sites.prod

Тогда обновление выглядит много проще:

  1. drush @my-sites.local upc -y
  2. # Проверяем, что код обновился корректно
  3. drush @my-sites.local updb -y
  4. # Проверяем, что базы обновлены корректно
  5. drush @my-sites.local cron -y