Что такое 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