XII. Admin-Prozesse
Admin/Management-Aufgaben als einmalige Vorgänge behandeln
Die Prozess-Formation ist das Bündel von Prozessen zur Erledigung der üblichen Aufgaben einer App (wie die Abarbeitung von Web Requests) während sie läuft. Daneben möchten Entwickler oft einmalige Administrativ- oder Wartungsaufgaben an der App erledigen, wie zum Beispiel:
- Datenbank-Migrationen starten(z.B.
manage.py migrate
in Django,rake db:migrate
in Rails). - Eine Konsole starten (auch bekannt als REPL Shell) um beliebigen Code zu starten oder die Modelle der App gegen die Live-Datenbank zu prüfen. Die meisten Sprachen stellen eine REPL zur Verfügung, wenn man den Interpreter ohne Argumente startet (z.B.
python
oderperl
) oder in manchen Fällen mit einem anderen Kommando (z.B.irb
für Ruby,rails console
für Rails). - Einmalig auszuführende Skripts aus dem Repo der App starten (z.B.
php scripts/fix_bad_records.php
).
Einmalige Administrations-Prozesse sollten in einer Umgebung laufen, die identisch ist zu der Umgebung der üblichen langlaufenden Prozesse. Sie laufen gegen einen Release und benutzen dieselbe Codebase und config wie jeder Prozess, der gegen einen Release läuft. Administrationscode wird mit dem App-Code ausgeliefert um Synchronisationsprobleme zu vermeiden.
Dieselben Techniken zur Isolation von Abhängigkeiten sollten für alle Prozessarten verwendet werden. Wenn zum Beispiel ein Ruby-Web-Prozess das Kommando bundle exec thin start
verwendet, dann sollte eine Datenbankmigration bundle exec rake db:migrate
verwenden. Wenn ein Python-Programm Virtualenv nutzt, sollte es sein mitgeliefertes bin/python
sowohl zum Start des Tornado Webservers als auch für alle manage.py
Admin-Prozesse verwenden.
Die Zwölf Faktoren bevorzugen Sprachen, die eine REPL Shell direkt mitbringen. Das erleichtert das Starten von einmal auszuführenden Skripten. In einem lokalen Deploy rufen Entwickler einmal auszuführende Admin-Prozesse direkt über ein Shell-Kommando im Checkout-Verzeichnis der App auf. In einem Produktions-Deploy können Entwickler ssh oder andere Kommando-Fernsteuerungs-Mechanismen benutzen, die die Ausführungsumgebung dieses Deploys für das Starten eines solchen Prozesses bereitstellt.