XII. Задачи администрирования
Выполняйте задачи администрирования/управления с помощью разовых процессов
Формирование процессов является некоторым набором процессов, которые необходимы для выполнения регулярных задач приложения (таких как обработка веб-запросов), когда оно исполняется. В дополнение к этому, разработчикам периодически необходимо выполнять разовые задачи администрирования и обслуживания приложения, такие как:
- Запуск миграции базы данных (например
manage.py migrate
в Django,rake db:migrate
в Rails). - Запуск консоли (также известной как оболочка REPL), чтобы запустить произвольный код или проверить модели приложения с действующей базой данных. Большинство языков предоставляют REPL путем запуска интерпретатора без каких-либо аргументов (например,
python
orperl
), а в некоторых случаях имеют отдельную команду (напримерirb
в Ruby,rails console
в Rails). - Запуск разовых скриптов, хранящихся в репозитории приложения (например,
php scripts/fix_bad_records.php
).
Разовые процессы администрирования следует запускать в среде идентичной регулярным длительным процессам приложения. Они запускаются на уровне релиза, используя те же кодовую базу и конфигурацию, как и любой другой процесс, выполняющий этот релиз. Код администрирования должен поставляться вместе с кодом приложения, чтобы избежать проблем синхронизации.
Те же самые методы изоляции зависимостей должны быть использованы для всех типов процессов. Например, если веб-процесс Ruby использует команду bundle exec thin start
, то для миграции базы данных следует использовать bundle exec rake db:migrate
. Аналогичным образом для программы на Python с использованием Virtualenv следует использовать поставляемый bin/python
как для запуска веб-сервера Tornado, так и для запуска любых manage.py
процессов администрирования.
Методология двенадцати факторов отдаёт предпочтение языкам, которые предоставляют REPL оболочки из коробки, и которые позволяют легко выполнять разовые скрипты. В локальном развертывании разработчики выполняют разовый процесс администрирования с помощью консольной команды внутри каталога с приложением. В рабочем развертывании разработчики могут использовать ssh или другой механизм выполнения удаленной команды, предоставленный средой выполнения, для запуска такого процесса.