УрокНастройка Drush. Алиасы и дополнительная конфигурация.

За хранение алисов для drush отвечает файл drushrc.php. Он может находиться в следующих местах:

1. В директории с конфигурацией сайта (например, sites/{default|example.com}/drushrc.php).
2. В директории sites/all/drush (sites/all/drush/drushrc.php).
3. В любой директории, указанной с помощью опции --config (-c).
4. В пользовательской директории .drush (например, ~/.drushrc.php).
5. В конфигационной папке операционной системы (например, /etc/drush/drushrc.php).
6. В директории, в которую был установлен drush.

Этот файл можно взять тут.

Если drush обнаружил этот файл в нескольких директориях, то настройки из них будут объеденены путём мержа конфигурационных массивов. Если же ваш конфиг рассчитан на определённую версию drush, то вы можете переименовать этот файл в drush[НОМЕР-ВЕРСИИ]rc.php. Например, для пятого драша этот файл будет называться drush5rc.php.

Давайте рассмотрим несколько примеров из его конфигурации, которые могут облегчить жизнь при разработке.

Пример 1. Обновление данных из Git.

Обычно получение данных из git репозитория выглядит следующим образом:

git pull origin somebrach

Давайте допишем в drushrc.php следующий конфиг:

$options['shell-aliases']['pull'] = '!git pull origin somebrach';

Теперь обновление из репозитория выглядит следующим образом:

drush pull

Просто, не так ли? Давайте чуть усложним примеры.

Пример 2. Переключение сайта между режимами обслуживания.

Для включения и выключения режима обслуживания конфиг должен содержать две такие опции:

$options['shell-aliases']['offline'] = 'variable-set -y --always-set maintenance_mode 1';
$options['shell-aliases']['online'] = 'variable-delete -y --exact maintenance_mode';

Теперь переключение между режимами обслуживания несколько проще:

drush offline # и мы в оффлайне.
drush online # и мы снова онлайн.

Продолжаем поднимать планку.

Пример 3. Правильный экспорт базы данных.

Экспорт базы данных - операция достаточно рутинная. На мой взгляд, "правильный экспорт" должен исключить лишние данные из таблиц, а также заархивировать дамп, чтобы его можно было быстрее стянуть с сервера.

Таблицы, из которых надо убирать данные, обычно определяются в зависимости от сайта. По умолчанию, лишние данные хранятся в таблицах с кэшем, системным журналом и сессиями:

$options['structure-tables']['common'] = array(
  'cache',
  'cache_bootstrap',
  'cache_field',
  'cache_filter',
  'cache_form',
  'cache_image',
  'cache_menu',
  'cache_page',
  'cache_token',
  'flood',
  'sessions',
  'watchdog',
);

Однако это ещё не всё. Теперь надо дописать алиас для драша, который будет делать красивый дамп, а также не выбирать данные из указанных выше таблиц:

$options['shell-aliases']['db-dump'] = 'sql-dump --structure-tables-key=common --gzip --result-file=db_dump_' . date('Y-m-d_H-i') . '.sql';

В результате вам будет доступна такая команда:

drush db-dump

Как нетрудно догадаться, она делает именно то, что я называю "правильным дампом".

Пример 4. Полный дамп сайта.

Полный дамп всего сайта можно сделать командой drush archive-dump (drush ard). Однако в некоторых ситуациях полный дамп не нужен, или же нужно кое-что подправить. Например, надо сделать "правильный" дамп базы данных, и получить архив с файлами Друпала без учёта симлинков (директория с файлами зачастую прилинкована именно таким образом). Для этого мне необходимо иметь конфиг такого плана:

$options['structure-tables']['common'] = array(
  'cache',
  'cache_bootstrap',
  'cache_field',
  'cache_filter',
  'cache_form',
  'cache_image',
  'cache_menu',
  'cache_page',
  'cache_token',
  'flood',
  'sessions',
  'watchdog',
);
 
$options['shell-aliases']['db-dump'] = 'sql-dump --structure-tables-key=common --gzip --result-file=db-dump_' . date('Y-m-d_H-i') . '.sql';
 
$options['shell-aliases']['files-dump'] = "core-execute tar -czvf files-dump_" . date('Y-m-d_H-i') . ".tar.gz ./";
 
$options['shell-aliases']['full-dump'] = "!drush db-dump && drush files-dump";

В результате вы можете сделать отдельно дамп базы, дамп файлов, а также одной командой дамп и того и другого:

drush full-dump

А самое главное, что вы в любой момент можете указать свои опции для сборки этих дампов.

Пример 5. Ещё несколько приятных алиасов.

Список наиболее используемых алиасов драша (из стандартного drushrc.php):

Вывод список модулей (кроме модулей ядра):

$options['shell-aliases']['noncore'] = 'pm-list --no-core';

Сброс всего кэша на сайте:

$options['shell-aliases']['wipe'] = 'cache-clear all';

Шедевр от разработчиков драша. Отключение модулей overlay и dashbord:

$options['shell-aliases']['unsuck'] = 'pm-disable -y overlay,dashboard';

Отключение всех модулей, которые не входят в ядро Друпала:

$options['shell-aliases']['dis-all'] = '!drush -y dis $(drush pml --status=enabled --type=module --no-core --pipe)';

Другие опции

Включает логирование и отправку анонимных отчётов о использовании разработчикам драша. Помогает сделать мир лучше:

$options['drush_usage_log'] = TRUE;
$options['drush_usage_send'] = TRUE;

Включение режима отладки в драше:

$options['v'] = 1;

Указывает уровень отображение PHP сообщений. По-умолчанию 'notice'. В среде разработки можно использовать 'warning'. При этом убедитесь, что в php.ini на вашем сервере опция error_reporting установлена в E_ALL.

$options['php-notices'] = 'warning';

Кодировка, в которой drush выводит свои сообщения (оставить одну на выбор):

$options['output_charset'] = 'ISO-8859-1';
$options['output_charset'] = 'KOI8-R//IGNORE';
$options['output_charset'] = 'ISO-8859-1//TRANSLIT';

В третьем примере я показал, как можно из некоторых таблиц убрать содержимое при дампе базы данных. А теперь я покажу, как можно лимитировать таблицы, которые участвую в дампе, до заранее сформированного списка:

$options['tables']['common'] = array(
  'user', 
  'permissions', 
  'role_permission', 
  'role',
  // и так далее.
);

Дамп также можно делать исключив некоторые таблицы из дампа полностью. В этом случае, когда будете делать дамп, необходимо будет указать дополнительный ключ --skip-tables-key=common:

$options['skip-tables']['common'] = array('temp1', 'temp2', 'temp3');

Заключение

Конфигурационный файл может содержать ещё массу полезных опций, я лишь указал наиболее интересные и чаще используемые. Весь список опций вы можете посмотреть в файле drushrc.php.

В завершении я хотел бы напомнить, что конфигурационный файл проходит обработку на php. Более того, при запуске команды драша уже был произведён полный бутстрап Друпала, как и для обычного пользователя. А это значит, что все опции для этого файла вы можете указывать динамически.

Комментарии

Аватар пользователя kalabro
kalabro написала:

Вообще всю папку examples стоит прочесть, много полезного можно найти :)

23.04.2013 11:44
Аватар пользователя Юрий
Юрий написал:

Исключить директории из дампа:
$options['shell-aliases']['files-dump'] = "core-execute tar -czvf files-dump_" . date('Y-m-d_H-i') . ".tar.gz --exclude .git --exclude ./sites/default/files/advagg* --exclude ./sites/default/files/css --exclude ./sites/default/files/js --exclude ./sites/default/files/languages ./";
Можно также через archive-dump:
$options['shell-aliases']['ard-nofiles'] = '!drush ard --tar-options=--exclude=%files';

Во втором случае я не смог добавить в исключения несколько директорий, пробовал:
$options['shell-aliases']['ard-nofiles'] = '!drush ard --tar-options=--exclude={%files, %files/css, %files/js}'
Еще пробовал через опцию tar -X:
$options['shell-aliases']['ard-nofiles'] = '!drush ard --tar-options=-X exclude.txt';
Оба варианта не заработали (пробвал на it-patrol CentOS)

28.11.2013 07:12

Комментировать