Webapplikationsupdate trotz Wartungsseite testen

Tags:

Heute kam die Frage auf, wie wir morgen ein grösseres Update unserer Webapplikation durchführen und testen können, ohne dass unsere Kundschaft in Server-Fehler und Exceptions reinläuft. Schnell war klar, dass wir die Webseite in den Wartungsmodus setzen müssen. Damit wir als Entwickler während dieses Updates aber trotzdem auf die Webseiten zugreifen können, hab ich mir folgende Lösung ausgedacht:

Die Entwickler senden einen speziellen HTTP Request Header, wodurch sie nicht auf die Wartungsseite weitergeleitet werden.

Manchmal sind Lösung echt simpel ... ;-)

Eigenen HTTP Request Header senden

Bestimmt gibt es auch andere Tools, doch wir haben uns für das Firefox-Addon Modify Headers entschieden. Dieses Addon ist schlicht gehalten und einfach zu bedienen.

Modify Headers Screenshot

Oben wählt ihr zuerst die Action aus. In unserem Fall ist das Add, da wir einen neuen Header hinzufügen wollen. Danach kommt der Name des Headers, der natürlich eindeutig sein sollte. Also zum Beispiel X-MyProject-Maintenance. Danach folgt der Wert des Headers. Empfehlenswert ist eine längere Zeichenkette, die nicht erraten werden kann. Zum Schluss kommt noch ein Kommentarfeld, dass ihr aber auch leer lassen könnt.

Nach dem Klick auf Add erscheint der Wert unten in der Liste. Durch einen Doppelklick oder die Buttons rechts, könnt ihr den Header aktivieren, bzw. deaktivieren. Achtung: Wenn ihr Modify Headers schliesst, wird der erstellte Header nicht mehr mitgeschickt.

Rewriting

Da wir mit Zend Framework arbeiten haben wir eh schon mod_rewrite im Einsatz. Deshalb gehe ich jetzt auch nur darauf ein.

Was wir jetzt noch wollen sind zwei Dinge:

  1. Alle Requests auf die Wartungsseite weiterleiten
  2. Ausnahme: Wenn ein Request mit unserem speziellen Header daher kommt

Ersteres wird mit folgender Rewrite Rule bewerkstelligt:

RewriteRule ^.*$ maintenance.php [NC,L]

Das Zweite mit der folgenden Rewrite Condition direkt oberhalb der Rewrite Rule:

RewriteCond %{HTTP:X-MyProject-Maintenance} !^super-secret-key$

Mit Zend Framework sieht das dann zum Beispiel so aus:

# Ignore static resources
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

# Show maintenance page
RewriteCond %{HTTP:X-MyProject-Maintenance} !^super-secret-key$
RewriteRule ^.*$ maintenance.php [NC,L]

# Rewrite everything to the bootstrapper
RewriteRule ^.*$ index.php [NC,L]

Zwischen Wartungs- und Live-Modus hin- und herschalten

Um in den Live-Modus zu wechseln, kommentiert ihr einfach die beiden .htaccess-Zeilen aus. Für den Wartungsmodus entfernt ihr die #s einfach wieder.

So, ich hoffe das hilft irgendwem. Für alternative Ideen bin ich natürlich offen. :-)

Ähnliche Artikel

Kommentare