Afficher une page de maintenance pendant le déploiement

Il est possible d’afficher une page statique de maintenance pendant les opérations de déploiement avec Capistrano.

cap deploy:web:disable

Il est même possible d’y ajouter le motif et l’heure prévue de remise en service :

cap deploy:web:disable REASON="installing new version" UNTIL="lunch time"

Notez que la page est en anglais.

Le mécanisme est simple. À l’invocation de la commande, Capistrano copie le fichier maintenance.html dans /shared/system/maintenance.html. Pour que ce fichier apparaisse, il faut configurer le serveur. Prenons l’exemple d’Apache (en particulier parce que je n’ai pas la première idée de comment ça marche avec d’autres serveurs).

Nous allons utiliser mod_rewrite pour faire une redirection de tout le site vers cette simple page, quand elle est présente. Il faut modifier le contenu de httpd.conf de la manière suivante :

	RewriteEngine On
	# Just for debug 
	#RewriteLog /home/.../logs/rewrite.log
	#RewriteLogLevel 5
 
	# Check for maintenance file and redirect all requests
	#  ( this is for use with Capistrano's disable_web task )
	RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
	RewriteCond %{SCRIPT_FILENAME} !maintenance.html
	RewriteRule ^.*$ %{DOCUMENT_ROOT}/system/maintenance.html [L]

Bien sûr, quand le déploiement est terminé, on remet le site en service avec  :

cap deploy:web:enable