Задача написать программу — фоновый обработчик. При работе с веб-приложением часто возникают такие задачи, которые нежелательно выполнять во время HTTP-запроса, а лучше отложить для обработки в фоне.
Такой обработчик и предстоит написать.
Для этого мы создали табличку в MySQL под названием task (dump на второй странице).
Каждая задача описывается одной записью в БД.
Относится к одной из категорий поле task
(напр. messages) и поле action
(напр. sms), где task
определяет название класса который будет использован, а action
— название его метода.
Классы относятся к пространству \Plp\Task
, а методы являются статическими.
Все данные по задаче хранятся в поле data в формате JSON.
В поле status
указывается статус задачи (int).
Обработчик должен взять задачу из базы, выполнить нужный класс+метод, передав ему значение поля data (декодированное через json_decode).
Результат, возвращенный от метода записать в БД в поле result
(закодировать в JSON).
Отметить задачу как выполненную.
Важно сделать обработку ошибок.
Выполняемые классы могут бросить два типа исключений:
\Plp\Task\UserException
— текст ошибки нужно записать в поле result, и попробовать выполнить задачу позже, но не более 3-х раз.
\Plp\Task\FatalException
— текст ошибки с бэктрейсом скинуть в error_log и пометить задачу, как невозможную к выполнению.
Оба исключения унаследованы от \Exception.
Итоговый файл должен запускаться из консоли, выводить в stdout отладочную информацию о каждой выполняемой задаче (датавремя, id, task, action и результат). Код выполнения самих классов можно закомментировать. Скрипт продолжает работать и обращаться к базе до бесконечности, пока не будет убит.
Установка может быть произведена либо клонированием репозитория, либо скачиванием архива и его последующая распаковка в любой директории.
Базы данных (основная и тестовая) должны быть создана вами самостоятельно.
Файлы, относящиеся к функционалу:
config/db.php конфигурационный файл подключения к основной БД
config/params.php параметры приложения (указывается количество попыток выполнения задачи)
migrations/ директория с миграциями
models/Plp/Task.php модель таблицы `task`
models/Plp/Task/ директория с классами для выполнения задания
tests/codeception/config/config.php конфигурационный файл подключения тестовой БД
tests/codeception/fixtures/ фикстуры тестов
tests/codeception/unit/ClassMethodTest.php тесты проверки исключений
tests/codeception/unit/TaskExecutionTest.php тесты проверки выполнения задач
README.md этот файл
После создания БД, доступы к ним должны быть прописаны в соответствующих конфигурационных файлах.
Далее необходимо выполнить миграции для обоих БД командами (выполняются из корневой директории):
php yii migrate
php tests/codeception/bin/yii migrate
Версия PHP 5.4 и выше.
Версия MySQL 5.5 и выше.
Опционально проверить требования фреймворка Yii (создание виртуального сервера для проверки не входит в данное руководство), проверить которые можно по локальной ссылке установки Yii2:
http://hostname/YiiPath/requirements/index.php
Функционал выполняет скрипт yii
, расположенный в корне. Запуск скрипта проводится командой (из корневой директории):
php yii ratio
Запуск тестов (также из корневой директории):
php vendor/bin/codecept run -c tests unit