Capistrano: Maintenance-Page 2.0

Capistrano: Maintenance-Page 2.0

  • Collaboration-Software%
  • Enterprise Portals%
  • Lifecycle-Management%
  • Interface-Design50%
  • Web Applications50%

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 /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.

Informationen

Autor:

Dominik Bors
bors [at] taktsoft [dot] com

Kommentare:

0 Kommentare

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p> <br>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

Weitere Informationen über Formatierungsoptionen