alainericgauthier.com

construire une présence sur le web

WSOD - pages complètement blanches sur mon site drupal

Accès interdit Drupal

Première visite de la journée, mon site affiche qu'un page blanche et rien d'autre.

En tant que bloggueur je n'ai pas peur des pages blanches, mais en tant que webmestre, je trouve cela terrifiant.
Avec les recherches et les manipulations, j'ai pris 30 minutes pour me sortir de cette situation. Je vous présente ici les étapes que j'ai trouvé pour y arriver. En espérant que ça pourra être utile à d'autres si jamais ça leur arrive.

Tout d'abord, le contexte. Mon site tourne sur Drupal 7 avec les dernières mise à jour (7.22 au moment d'écrire cet article). Je suis sur un plan d'hébergement partagé (serveur mutualisé). Ce qui veut dire que je n'ai pas de shell et que je ne peux pas utiliser drush sur mon site de production. J'ai une installation multi-site et c'est un des sous-sites qui est tombé.

Qui est le coupable?

Évidemment, ma première réaction émotive a été d'accuser Drupal de ne pas êtres fiable. Pus tard, j'ai trouvé la cause plus probable du problème (mollom), je m'en suis donc pris à ce module. En regardant d'un peu plus près, le problème est que j'ai négligé de mettre la base de données à jour après avoir fait la mise à jour du module. J'avais fait la mise à jour pour le site principal mais par pour l'autre site de mon installation multi-site. Donc, le coupable c'est moi. Les machines font rarement des erreurs sans l'aide des humains.

Drupal, parle moi

Quand j'ai rencontré le problème, je me suis dit que Drupal me boudait et qu'il ne voulait plus me parler. Pas de page, pas de message d'erreur, même le titre de la page ne changeait pas quand j'entrais l'adresse d'une page qui n'existait pas. Dans la communauté Drupal, on appele ça un WSOD (white screen of death). La première page que j'ai trouvée pour en apprendre un peu plus sur les WSOD se trouve ici:
http://drupal.org/node/158043

En suivant les instruction sur cette page, J'ai inséré un petit bout de code au début du fichier index.php.
Pour ce faire vous devez accéder au fichier texte qui se trouve à /home/public_html/index.php.
Tout de suite après la balise <?php, il faut ajouter le code.
Une fois le code ajouté, les premières lignes du fichier index.php vont ressembler à ceci:

<?php
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
error_reporting(E_ALL);
ini_set('display_errors',TRUE);
ini_set('display_startup_errors',TRUE);
}

Une fois que j'ai sauvegardé ce code et que j'ai rechargé la page d'accueil de mon site, voici le message d'erreur que j'ai reçu :

Fatal error: Class 'MollomDrupal' not found in /home/the+user/public_html/sites/all/modules/mollom/mollom.module on line 2150

Ce n'est pas beaucoup et je n'ai toujours pas de solution mais au moins, mon site me parle. Je mets ce message d'erreur dans mon engin de recherche préféré en retirant la partie qui identifie mon site (sinon je n'ai pas de résultats).

Fatal error: Class 'MollomDrupal' not found in sites/all/modules/mollom/mollom.module on line 2150

Le résultat de ma recherche me ramène à cet article: http://drupal.org/node/1980598

La solution : utilser drush pour vider le cache. Mais je n'ai pas drush parce que je n'ai pas un serveur dédié, donc pas de shell sur un serveur mutualisé.
Après quelques recherches, J'ai trouvé cette page qui permet de faire de reconstruire le registre (équivalent de vider tous les chaches) :
http://drupal.org/project/registry_rebuild

Registry Rebuild

Cet outil prend la forme d'une module et s'installe de la même manière qu'un module mais ce n'est pas un module.
On l'insalle au même endroit que les modules et on y accède en ajoutant sites/all/modules/registry_rebuild/registry_rebuild.php
au nom de domaine du site qui un problème.

http://monsite.com/sites/all/modules/registry_rebuild/registry_rebuild.php

Je dois dire que j'étais assez fier de moi puisque j'ai réglé mon problème en moins de 30 minutes.

C'est après tout ça que je me suis aperçu que j'avais oublié de faire la mise à jour de la base de données après avoir fait la mise à jour du module. Je me rappelle très bien avoir fait la mise à jour sur le site principal, mais pas sur l'autre site de mon installation multi-site. J'ai donc fait une sauvegarde de ma base de données et j'ai fait la mise à jour.

Ramasser les pots cassés

Il faut ensuite défaire le code que j'ai ajouté dans index.php. Je l'ai mis en commantaire si jamais j'ai encore le même problème, le code sera déjà là. Je ne suis pas sûr si c'est très sécuritaire mais j'ai fait la même chose pou registry_rebuild. J'ai mi un signet sur la page si jamais j'en ai encore besoin.

J'espère que cet article vous sera utile si jamais vous tombez dans la même situation. Si vous avez des questions, vous pouvez me contacter avec le formulaire de contact.

Commentaires

Par amille (non vérifié) le 15 Août, 2017 - 20:25

Merci !! j'ai sauvé un site après une mise à jour qui a foiré grâce à ce tuto !!

Par Alain Éric Gauthier le 16 Août, 2017 - 06:03

:-)