Drupal et filtres: méfiez vous des caches (et des images) !

Share and options

Un bug étrange semble survenir lorsqu'on utilise le module Image de Drupal: lors de l'affichage de certaines images, le rendu calcule un chemin absolu (comprenant le nom de domaine).

Dans l'absolu, ce n'est pas un problème, sauf quand on transfert un site complet avec sa base de donnée sur un nouveau serveur, avec un nouveau nom de domaine.

Après 2 heures d'introspection du code du module img_assist, voici quelques notes intéressantes:
* Le module img_assist est intelligent, il créer les dérivées des images à la taille demandée si elle n'existent pas. Au passage, il ne calcule pas de dérivée dont la différence de taille avec une dérivée déjà existante n'est pas significative (une formule mathématique savante est utilisée).
* Le module img_assist en question est intelligent, il ne retourne que des chemins relatifs au nom de domaine -note: comprenant donc le base_path-, ce qui ne pose pas de soucis dans le cas de la copie d'une base de donnée sur un autre site.
* Ce dernier implémente le hook_filter pour lire les balises qu'il rajoute dans le corps des nodes. Donc à chaque affichage d'une node, son contenu est recalculé; à priori donc les chemins sont bons et relatifs au nom de domaine.
* Le hook_filter à un cache interne auquel on ne s'intéresse pas quand on développe des modules. Je n'ai pas encore eu le temps d'introspecter sa durée de vie, mais on peut espérer qu'il ne reste valide que jusqu'à modification de la node en question.
* Pour une raison qui m'est totalement inconnue, le module Image (dépendance du module img_assist) à laissé quelques images dans la base de donnée avec un chemin relatif à la racine du disque dur !.. donc complètement inexploitable pour du web.. Peut-être le module Asset est passé par là et aurait loupé une opération ou deux ?

La conclusion de tout ceci est: méfiez vous des caches !
Pour des raisons qui me sont encore totalement inconnues, certaines images ont toujours un chemin en dur relatif au nom de domaine du site sur lequel elles ont été uploadées, et ceci sans aucune raison apparente, ni trace en base de donnée.
Après avoir lu la moindre ligne du code du module img_assist, je me suis rendu compte que si un problème persistait, il ne venait clairement pas de ce module, mais d'un niveau plus bas.