Найти в Дзене

Drush: консоль в Drupal

Что такое Drush? Если вы задаёте этот вопрос прямо сейчас, то примите мои поздравления. Вы один из тех счастливчиков, кто изменит свою жизнь сегодня. Отмените все свои дела, и прочтите эту статью о Drush, инструменте командной строки для управления сайтом на Drupal. Все знают о Drush! Кто не любит Drush, верно? Верно! Но больше и больше я наблюдаю как люди заново открывают для себя вещи, которые Drush уже умеет, просто потому что они не знают всего что может сделать Drush. Сперва - основы Все знают что... Здесь перечислены несколько команд Drush, которые большинство людей, знакомых с ним, знает и любит, давайте и мы узнаем о них: Примечание переводчика: вы также можете использовать drush en для модуля, который ещё не загружен, вам будет предложено автоматически его загрузить (если он будет найден в репозитории) . Все знают что (Features версия™) Примечание переводчика: Features - это модуль, который делает возможным перенос функционала одного сайта на другой, так как с его помощью вы
Оглавление

Что такое Drush?

Если вы задаёте этот вопрос прямо сейчас, то примите мои поздравления. Вы один из тех счастливчиков, кто изменит свою жизнь сегодня. Отмените все свои дела, и прочтите эту статью о Drush, инструменте командной строки для управления сайтом на Drupal.

Все знают о Drush!

Кто не любит Drush, верно? Верно!

Но больше и больше я наблюдаю как люди заново открывают для себя вещи, которые Drush уже умеет, просто потому что они не знают всего что может сделать Drush.

Сперва - основы

Все знают что...

Здесь перечислены несколько команд Drush, которые большинство людей, знакомых с ним, знает и любит, давайте и мы узнаем о них:

  • drush updb: запускает обновление базы данных
  • drush cc all: очищает все кэши
  • drush dl: скачает модуль из репозитория Drupal.org
  • drush en: включает модуль
Примечание переводчика: вы также можете использовать drush en для модуля, который ещё не загружен, вам будет предложено автоматически его загрузить (если он будет найден в репозитории) .

Все знают что (Features версия™)

Примечание переводчика:
Features - это модуль, который делает возможным перенос функционала одного сайта на другой, так как с его помощью вы можете объединить созданные вами объекты (материалы, представления, форматы текста и т.д.) в Feature (фичу), и скопировать её в виде отдельного модуля на другие сайты, где требуется схожий функционал.

Если вы используете Features, то вам вероятно знакомы данные действия:

  • drush fra: откатывает все фичи
  • drush fe: экспортирует новые или обновленные фичи с новыми компонентами
  • drush fu: обновляет фичи в соответствии с конфигурацией сайта
  • drush fr: откатывает конфигурацию сайта в соответствии с текущим состоянием фич

Псевдонимы

Для совершения многих забавных вещей, у вас должно быть понимание псевдонимов Drush. Если у вас его нет, то вот его суть: псевдонимы Drush позволяют вам с легкостью запускать команды Drush на удаленные сайты Drupal, а не только использовать их на ваших локальных сайтах. Если вы постоянно используете SSH, для того чтобы запустить всего несколько команд в различных окружениях, вам стоит прекратить это делать.

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

Хорошо, вот ещё кое что. Вероятно, это подходящее время для того чтобы упомянуть несколько быстрых команд.

Для начала, давайте запустим какую-нибудь произвольную команду в нашем рабочем
окружении:

drush @foo-dev exec echo $SOMETHING

Или, возможно, мы должны пойти, и сделать что-либо более сложное используя SSH:

drush @foo-dev ssh

Или, возможно, нам нужно выполнить кучу команд-псевдонимов без использования SSH (так как для данных команд требуются локальные файлы, или что-нибудь ещё). В этом случае мы можем использовать псевдоним до тех пор, пока нам это не станет нужно:

drush site-set @foo-dev

И затем, мы можем делать то, что требуется, просто запуская необходимые команды без аргумента "@foo-dev". Для того, чтобы использовать Drush локально, нам необходимо повторно запустив эту команду без "@foo-dev".

Теперь продолжайте читать, матрос.

Синхронизируем корабль

(Предупреждение: эти заголовки будут все хуже и хуже)

Одна из самых частых вещей, совершаемых с помощью псевдонимов Drush, это синхронизация состояний одного псевдонима с другим.

Для примера, вы хотите синхронизировать базу данных из вашего рабочего окружения с локальной базой?

drush sql-sync @foo-dev @foo-local

А как насчет файлов? Синхронизируем и их!

drush rsync @nexderm-dev:%files @nexderm:%files

Или же, например некто отправил вам дамп базы, и вы должны импортировать его старомодным способом?

cat ~/path/to/file.sql | drush sql-cli

Временами, может быть полезным автоматизировать запуск произвольных команд SQL на множестве окружений, и это тоже очень легко. Скажем для примера вы захотели получить имя пользователя с uid равным 1 на вашем боевом окружении (команда drush user-information была бы в этом плане гораздо лучше, но заткнитесь).

drush @foo-prod sqlq 'select name from users where uid = 1'

Это также полезно для автоматизации, например если вам захочется написать быстрый скрипт для изменения имени пользователя с uid равным 1 на всех ваших окружениях.

Drupal без Drupal

Часто бывает полезным запустить одноразовый произвольный код без привязки к контексту Drupal, и без необходимости помещения этого кода в кодовую базу. Обычно это делается двумя способами:

Если ваш код представлен всего одной строкой, то здесь самой полезной командой будет php-eval. Для примера давайте проинспектируем объект материала:

drush @foo-dev php-eval 'print\_r(node\_load(123));'

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

drush php-script filename.php

Когорты отчетов

Drush поистине хорош для получения нами информации о Drupal без ожидания загрузки целой страницы.

Как много раз вы заходили на страницу отчета о событиях и сидели ожидая загрузки страницы, а после загрузки снова загружали страницу перейдя на следующую через пагинацию, или добавив фильтры, или ещё какие-то действия производили, чтобы найти нужное сообщение об ошибке? Хватит делать это! Делайте вместо этого так:

drush watchdog-show

Существует много полезных опций для watchdog-show, таких как:

  • --tail: непрерывно показывать новые сообщения
  • --full: показывать весь вывод, со всеми полями, вместо краткой версии
  • --severity: выбрать важность сообщений (например "--severity=error")
  • --count: показывать больше чем 10 сообщений (например "--count=100")

Я ставлю на то, что вам должна быть известна возможность получать переменные с помощью команды "drush vget", но знали ли вы то, что вы можете задать опцию "--format=whatever" для того, чтобы получать результаты в форматах JSON, CSV, YAML или еще кучи различных форматов.

Ещё одним из моих фаворитов является следующая команда, которая просто выводит все те вещи, которые вы видите в на странице отчета о состоянии в Drupal. Это круто для проверки перед тем как выпустить очередной релиз в продакшен.

drush status-report

И вот этот парень, который выводит кучу полезной информации о текущей конфигурации, такой как информация о БД, путь до исполняемого файла PHP или до файла php.ini, версию Drupal, путь корневого каталога Drupal и ещё много всякого. Это лучший первый шаг при отладке поломанной установки.

drush status

Иногда, когда вам понадобится редактировать файлы конфигурации (такие как php.ini, или settings.php, или .htaccess и другие), вы можете запустить эту команду, чтобы просто выбрать из этих файлов тот который вам нужен, и он откроется в редакторе для вас:

drush config

Использование пользователей

Drush это нечто похожее на чудо, когда речь заходит об управлении пользователями.

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

drush user-login <имя_пользователя или uid>

Или, если вы немного менее ленивы, и просто хотите сменить пароль на что-то такое, чтобы вы смогли зайти на сайт старым путём:

drush user-password <имя_пользователя или uid> --password=test1234

Еще есть один весёлый процесс - добавление пользователей через заполнение полей формы. Пропустите это:

drush user-create person123 --mail="what@isthis.com" --password="letmein"

Когда это будет сделано, вы возможно захотите назначить новым пользователям роли. Для работы с ролями мы имеем в запасе это:

drush user-add-role "user editor" person123
drush user-remove-role "user editor" person123

Но погодите! Роль, которая вам нужна ещё не существует. Давайте добавим её, и дадим ей несколько прав.

drush role-create 'user editor'
drush role-add-perm 'user editor' 'administer users'

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

drush user-information <имя_пользователя или uid>

Поля мечты

Одна из самых недоиспользуемых вещей, которые Drush дает вам - это инструменты управления полями. Я просто скопирую и вставлю выдержку из документации, так как она очень понятна.

  • field-clone: копирует поле и все его экземпляры
  • field-create: создает поля и экземпляры, возвращает URL для редактирования
  • field-delete: удаляет поле и его экземпляры
  • field-info: показывает информацию о полях, типах полей и виджетах
  • field-update: возвращает URL страницы редактирования поля

Другие вещи

Тут собраны ещё несколько замечательных команд, которые не очень вписываются в четкие категории.

Есть аккуратные решения для резервного копирования:

drush archive-dump #архивирует код, файлы, содержимое БД в единый пакет
drush archive-restore #разворачивает один из этих архивов в полноценный сайт

Несколько похожа на это команда, которая скачает и установит Drupal, запустит его на небольшом встроенном сервере и авторизует вас. Обратите внимание, что эта команда содержит множество опций и является слишком мощной.

drush core-quick-drupal

Drush также позволяет вам поиграться с кэшем, что может сэкономить ваше время при отладке проблем кэширования:

drush cache-get your-cid your-bin
drush cache-set your-cid your-data your-bin your-expire

Есть несколько неизвестных команд для работы с contrib:

drush pm-info modulename #показывает файлы, разрешения, ссылку на конфигурацию, версию модуля и прочую информацию
drush pm-releasenotes modulename #показывает примечания к версии модуля

Запустите cron. Не очень интересно, но слишком полезно.

drush cron

С вами было такое, что в середине отладки вы понимаете что нужный вам код находится в хуке form_alter (или каком нибудь другом хуке), но непонятно в каком модуле находится этот хук? Попробуйте эту команду, которая расскажет вам обо всех реализациях того или иного хука, и вы сможете выбрать одну из них для просмотра исходного кода.

drush fn-hook form_alter

И в заключении есть "документация Drush в коробке", которая содержит массу полезной информации. Серьёзно, попробуйте прямо сейчас.

drush topic

Мышление Drush

Там есть огромная куча полезных команд Drush, некоторые из которых вы раньше не видели.

Полезно начинать думать с точки зрения «как это может сделать Drush для меня?» и вы наверняка обнаружите, что ответ на этот вопрос - «довольно легко».

Играйте в игру с собой. В следующий раз, когда вы работаете над созданием сайта или чем-то, что связано с множеством щелчков мышью в интерфейсе Drupal, награждайте себя как нибудь, когда вы делаете что-то в Drush, а не в пользовательском интерфейсе.

Но почему? Во-первых вы будете тратить гораздо меньше времени на загрузку страниц. Во-вторых, Drush поддается автоматизации, и мышление с точки зрения Drush, естественно, заставляет вас думать с точки зрения автоматизации и написания сценариев, что является прекрасным.

Практикуйте некоторое мышление Drush! Посмотрите drushcommands.com для того, чтобы вдохновиться этим ещё больше.

Оригинальная статья: Drushful Thinking | Mike Crittenden's Blog