J'écris un script de déploiement qui fonctionne comme ceci:
Copiez la racine actuelle du document site.current
dans un nouveau dossier du même niveau.
/web/site.current
copié dans /web/site.new
Mettre à jour le nouveau dossier. Pendant ce temps, les visiteurs voient toujours le site actuel.
/web/site.current
déplacé vers /web/site.r42
/web/site.new
déplacé vers /web/site.current
.Le seul problème est qu’il n’ya aucun moyen de rendre ce commutateur atomique. Il est donc théoriquement possible que quelqu'un (visiteur ou web crawler) tente d'accéder au site Web pendant les quelques millisecondes où la racine du document site.current
n'existe pas.
Remarque: J'ai déjà passé d'innombrables heures à essayer différentes méthodes (de RewriteRules à ErrorDocuments en passant par MultiViews) pour afficher une page de maintenance destinée à l'utilisateur si la racine du document n'est pas présente. Ce n'est donc pas la raison de ma question. Je serai heureux d'entendre une nouvelle solution sous forme de commentaire, mais maintenant, j'en doute fortement (en particulier étant donné que je ne peux pas modifier ma configuration vhost, uniquement les fichiers .htaccess).
Note 2: Je n'utilise pas de commutateur de lien symbolique (ce qui serait atomique) car Apache utilise une sorte de cache sur les liens symboliques et je ne peux pas installer mod_realdoc
pour résoudre le problème.
Il n'y a pas de risque de référencement lié à des erreurs temporaires sur votre site. Google pardonne très peu les temps morts. Les temps d'arrêt de moins d'une journée ne nuiront généralement pas à votre site du point de vue du référencement. Lorsque Googlebot rencontre une erreur 404 ou 500 sur une page qu'il a détectée dans le passé, il réessaye 24 heures avant de supprimer la page de l'index.
Quelques millisecondes de temps d'indisponibilité n'auront plus aucune importance.