Capistrano – Maintenance-Page 2.0

Beim automatisierten Deployment einer Web-Applikation mit Capistrano gibt es ein kleines, aber feines Feature um eine Web-Applikation in einen Wartungs-Modus zu versetzen.

Durch den Aufruf von

cap deploy:web:disable

im lokalen Projektverzeichnis...

Beim automatisierten Deployment einer Web-Applikation mit Capistrano gibt es ein kleines, aber feines Feature um eine Web-Applikation in einen Wartungs-Modus zu versetzen.

Durch den Aufruf von

cap deploy:web:disable

im lokalen Projektverzeichnis wird über SSH eine Maintenance-Page, die über die Wartungsarbeiten informiert, auf den Web-Server kopiert.

Beispielhafte Capistrano Maintenance-Page

Damit alle Aufrufe auf die Maintenance-Page gelangen, muß der Web-Server einmalig konfiguriert werden. Zum Beispiel sollte in der Apache-Konfiguration durch das Rewrite-Modul (mod_rewrite) alle Requests auf die Maintenance-Page gelenkt werden, falls die Maintenance-Page auf dem Web-Server existiert. Dies gelingt mit folgenden Zeilen:

# Check for maintenance file and redirect all requests
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteRule !.(jpg)$ system/maintenance.html [L]

Um den Wartungs-Modus wieder zu verlassen genügt es

cap deploy:web:enable

aufzurufen.

Ausnahme für eigene IP-Adresse

Oft beabsichtigt man ungestört die Web-Applikation nach den Wartungsarbeiten testen zu können. Dafür sollte die Maintenance-Page nur für andere User angezeigt werden. Dies stellt durch eine zusätzlichen Rewrite-Condition in der Apache-Konfiguration auch kein Problem dar.

# Check for maintenance file and redirect all requests
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
# Except your ip address
RewriteCond %{REMOTE_ADDR} !99\.99\.99\.99
RewriteRule !.(jpg)$ system/maintenance.html [L]

Benutzerdefinierte Maintenance-Page

Die Standard-Maintenance-Page kann auch einen anderen Grund als "maintenance" und ein anderes geplantes Ende des Wartungsfensters als "shortly" darstellen, indem man diese einfach beim Deaktivieren der Web-Applikation definiert:

cap deploy:web:disable REASON="hardware upgrade" UNTIL="12pm"

Möchte man die Maintenance-Page selber gestalten, oder vielleicht ins Deutsche übersetzen, so muß man bei sich lokal das Template bearbeiten. Das Template findet man im Capistrano-Verzeichnis zum Beispiel in /var/lib/gems/1.8/gems/capistrano-2.5.0/lib/capistrano/recipes/templates/maintenance.rhtml.

Ist mehr als eine Person befugt die Web-Applikation in den Wartungs-Modus zu versetzen, ist letzteres, eine Anpassung des lokalen Template, kein gangbarer Weg. Desweiteren ist es oft auch wünschenswert selbst die Maintenance-Page im Design der Anwendung zu halten. Um dies beides zu erreichen, empfiehlt es sich eine separate Maintenance-Page in der Web-Application anzulegen, und auf diese umzuleiten, falls die Standard-Maintenance-Page auf dem Server existiert.

# Check for maintenance file and redirect all requests to custom maintenance page
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteRule !.(jpg)$ custom_maintenance.html [L]

Bei dieser Lösung verliert man allerdings die Möglichkeit den Grund und das Ende des Wartungsfensters anzugeben.


Zur Blog-Übersicht