Перейти к содержанию
Типичный Социум

PHP-Watcher: инструмент, который упрощает разработку долгоживущих приложений


Рекомендуемые сообщения

  • Админ
Опубликовано

PHP-Watcher: инструмент, который упрощает разработку долгоживущих приложений
20 ноября 2019 от https://habr.com/ru/company/skyeng/blog/475624/


Мы любим PHP за простоту: ты пишешь код, обновляешь страницу в браузере и сразу видишь изменения. Но если дело доходит до консольных команд, которые могут быть долгоживущими процессами, — например, если мы пишем асинхронный HTTP-сервер для загрузки файлов, — разработка может оказаться весьма болезненной.

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

Это как Nodemon, но на PHP

Некоторое время я сам использовал Nodemon. Это инструмент из мира Node.js, однако если его немного поднастроить, можно использовать и с PHP-скриптами. Но ведь на самом деле я не хочу устанавливать Node.js и тащить кучу неизвестных мне NPM-пакетов в своё асинхронное PHP-приложение, чтобы перезапускать его.

Поскольку я активно общаюсь в твиттере, то спросил там, кто еще сталкивался с такой проблемой и хотел бы получить решение. Увидев интерес, сел писать инструмент, который предоставляет такой же функционал, что и Nodemon, только на PHP и для PHP.

Прошел месяц: с PHP-Watcher вам больше не нужно устанавливать Nodemon или любой другой пакет NPM для разработки вашего долгоживущего PHP-приложения.

Вот так это работает

Библиотеку можно установить через Composer:

composer global require seregazhuk/php-watcher

Представим, что мы работает над долгоживущим приложением на основе Symfony. Точка входа в наше приложение — файл public/index.php. Мы хотим отслеживать изменения в папках src и config. Еще мы хотим, чтобы приложение автоматически перезапускалось, как только мы изменим исходный код или параметры конфигурации. Вот как можно решить эту задачу:

php-watcher public/index.php --watch src --watch config

Команда запустит скрипт public/index.php, который начнёт отслеживать изменения в директориях src и config. Как только в любой из них изменится файл, PHP-Watcher перезапустит скрипт.

По умолчанию он отслеживает изменения только в PHP-файлах. Но Symfony хранит свои конфиги в yaml. Поэтому нам нужно явно указать “вотчеру”, чтобы он отслеживал как PHP, так и yaml-файлы. Делается это с помощью опции --ext:

php-watcher public/index.php --watch src --watch config --ext php,yaml

Допустим, мы поняли, что нам не нужно перезапускать приложения при любых изменениях внутри директории src. Например, нам бы хотелось игнорировать изменения в поддиректории src/Migrations. В этом случае можно воспользоваться опцией --ignore:

php-watcher public/index.php --watch src --watch config --ext php,yaml --ignore Migrations

Теперь PHP-Watcher начнёт отслеживать изменения в директориях src и config, но будет игнорировать любые изменения внутри поддиректории Migrations. Кроме того, он по умолчанию игнорирует изменения во всех dot- и VCS-файлах.

“Вотчер” поддерживает настройку своего поведения не только через опции командной строки, но и через файлы конфигурации. Если не хочется каждый раз в командной строке передавать кучу опций и параметров, то можно создать файл конфигурации .php-watcher.yml. Например, предыдущую команду можно заменить следующим конфигурационным файлом:

watch:
  - src
  - config
extensions:
  - php
  - yaml
ignore:
  - Migrations

Имея такой файл, мы можем просто активировать “вотчер”, указав лишь PHP-скрипт, который нужно перезапускать. Все остальные настройки будут взяты из файла:

php-watcher public/index.php

Что будет, если у нас есть и файл конфигурации и аргументы командной строки? В таком случае все аргументы, переданные из командной строки, перезатрут соответствующие значения из файла конфигурации.

По умолчанию PHP-Watcher использует исполняемый файл PHP, чтобы запустить скрипт. Мы пишем в терминале команду:

php-watcher public/index.php

Под капотом создается дочерний процесс с командой php public/index.php. В большинстве случаев это то, что нужно. Однако если в вашем окружении иной исполняемый файл, можно явно указать, какую команду следует выполнить. Например, когда у нас есть несколько версий PHP в одной системе, а мы хотим запускать наше приложение с исполняемым файлом php7.4, можно воспользоваться опцией --exec и указать свой исполняемый файл:

php-watcher public/index.php --exec php7.4

То же самое через файл конфигурации:

watch:
  - src
  - config
executable: php7.4

PHP-Watcher автоматически не перезапускает приложение, если оно упало. В dev-окружении в этом и нет особой необходимости — ведь пока мы разрабатываем новое приложение, это нормально, что иногда оно будет крашиться. Если приложение упало (завершилось с кодом, отличным от 0), “вотчер” даст нам об этом знать. Как только мы пофиксим код, изменения будут обнаружены в исходниках — и приложение перезапустится.

Спасибо за внимание! Больше информации о PHP-Watcher можно найти на домашней странице проекта на GitHub. В документации описаны основные паттерны использования. Проект пока ещё находится в стадии разработки, но API уже довольно стабильный. Буду рад, если воспользуетесь.

P.S. Не стесняйтесь оставлять отзывы и пожелания через issue на GitHub.

Telegram сайта  "Типичный социум"

Do not be indifferent. Support for motivation to continue on to engage in this further! Thanks

img.png

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Обжалование или подача апелляции на снятие Бана в группе "Типичный Социум IT!
Заявки и обжалование отправлять в Телеграм bot @ModeratorTS_Bot


×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.Политика конфиденциальности