forcer le vidage de cache

Bonjour

Je voudrais forcer le vidage de cache à chaque mise à jour de mon plugin.

J’ai bien lu ici https://programmer.spip.net/Actualisation-du-cache

Dans le code PHP d’un plugin, on peut forcer le vidage du cache au moyen du code suivant :

// On invalide les caches
include_spip(‹ inc/invalideur ›);
suivre_invalideur(« id=‹ $objet/$id_objet › »);

ou $objet et $id_objet indiquent habituellement quel est l’objet dont la modification entraîne une modification du cache.

Mais j’ai 2 questions :

  • dans quel fichier doit-on mettre ce code ?
  • quel « objet » indiquer pour que tout le cache soit vidé ?

JC

Le 09/02/2021 à 20:46, Jean-Christophe Villeneuve a écrit :

Bonjour

Je voudrais forcer le vidage de cache à chaque mise à jour de mon plugin.

J'ai bien lu ici Actualisation du cache - Programmer avec SPIP 4

    Dans le code PHP d’un plugin, on peut forcer le vidage du cache au
    moyen du code suivant :

    // On invalide les caches
    include_spip('inc/invalideur');
    suivre_invalideur("id='$objet/$id_objet'");

    ou $objet et $id_objet indiquent habituellement quel est l’objet
    dont la modification entraîne une modification du cache.

Mais j'ai 2 questions :
- dans quel fichier doit-on mettre ce code ?
- quel "objet" indiquer pour que tout le cache soit vidé ?

JC

1) pour l'instant, suivre invalideur ne fait concrètement rien de son paramètre... donc tu met ce que tu veux
2) Le fichier _administrations des plugins - Programmer avec SPIP 4

Cela étant forcer le vidage de cache à une mise à jour de plugin, c'est violent :slight_smile:

Merci de ta réponse

Oui en effet c'est un peu violent.
Mais en fait, c'est que la plupart du temps, une mise à jour du plugin (Escal pour ne pas le citer ;-)) fait péter la partie publique.
Et que j'ai régulièrement des appels au secours "Mon site est tout cassé"
Bien sûr un vidage de cache rétabli un bon affichage.

Forcer le vidage de cache ma paraissait donc une bonne idée, d'autant que celui-ci peut devenir assez conséquent.

JC

Le 09/02/2021 à 20:55, Maïeul Rouquette a écrit :

Le 09/02/2021 à 20:46, Jean-Christophe Villeneuve a écrit :

Bonjour

Je voudrais forcer le vidage de cache à chaque mise à jour de mon plugin.

J'ai bien lu ici Actualisation du cache - Programmer avec SPIP 4

Dans le code PHP d’un plugin, on peut forcer le vidage du cache au
moyen du code suivant :

// On invalide les caches
include\_spip\('inc/invalideur'\);
suivre\_invalideur\("id='$objet/$id\_objet'"\);

ou $objet et $id\_objet indiquent habituellement quel est l’objet
dont la modification entraîne une modification du cache\.

Mais j'ai 2 questions :
- dans quel fichier doit-on mettre ce code ?
- quel "objet" indiquer pour que tout le cache soit vidé ?

JC

1) pour l'instant, suivre invalideur ne fait concrètement rien de son paramètre... donc tu met ce que tu veux
2) Le fichier _administrations des plugins - Programmer avec SPIP 4

Cela étant forcer le vidage de cache à une mise à jour de plugin, c'est violent :slight_smile:

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 09/02/2021 à 21:15, Jean Christophe Villeneuve a écrit :

Merci de ta réponse

Oui en effet c'est un peu violent.
Mais en fait, c'est que la plupart du temps, une mise à jour du plugin (Escal pour ne pas le citer ;-)) fait péter la partie publique.
Et que j'ai régulièrement des appels au secours "Mon site est tout cassé"
Bien sûr un vidage de cache rétabli un bon affichage.

Forcer le vidage de cache ma paraissait donc une bonne idée, d'autant que celui-ci peut devenir assez conséquent.

JC

bah ca pose question tout de même que cela fasse tout péter... normalement il n'y a pas de raison, vu qu'à l'update d'un plugin les chemins sont recalculés, et du coup aussi les cache des squelettes.

Oui je suis d'accord, ça pose question.
Mais où chercher pour trouver l'origine de ce souci ?

JC

Le 09/02/2021 à 21:38, Maïeul Rouquette a écrit :

Le 09/02/2021 à 21:15, Jean Christophe Villeneuve a écrit :

Merci de ta réponse

Oui en effet c'est un peu violent.
Mais en fait, c'est que la plupart du temps, une mise à jour du plugin (Escal pour ne pas le citer ;-)) fait péter la partie publique.
Et que j'ai régulièrement des appels au secours "Mon site est tout cassé"
Bien sûr un vidage de cache rétabli un bon affichage.

Forcer le vidage de cache ma paraissait donc une bonne idée, d'autant que celui-ci peut devenir assez conséquent.

JC

bah ca pose question tout de même que cela fasse tout péter... normalement il n'y a pas de raison, vu qu'à l'update d'un plugin les chemins sont recalculés, et du coup aussi les cache des squelettes.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 09/02/2021 à 21:43, Jean Christophe Villeneuve a écrit :

Oui je suis d'accord, ça pose question.
Mais où chercher pour trouver l'origine de ce souci ?

JC

dekja si c'est tout pété, est-ce les squelettes ou les css qui plantent ?

mais tu bien le filtre / la fonction timestamp lorsque tu appel un fichier .css ?

Hello

Je relance le sujet car même après avoir ajouté le filtre |timestamp aux appels des CSS, le problème se produit encore parfois.

Peu importe car il n’y a à ma connaissance que le plugin cachelab qui utilise cette information. Donc tu peux demander suivre_invalideur("mise_a_jour_escal");

La question c’est surtout « comment l’appeler » et une réponse simple serait « dans le pipeline de mise à jour d’un plugin » mais je sais pas si ça existe.
Mais dans le lien pointé par Maieul ya tout ce qu’il faut a priori :

Pour chaque plugin de préfixe `prefixe`, le fichier `prefixe_administrations.php` est lu automatiquement lors de la consultation de la page d’administration des plugins, lorsqu’il y a un changement de version de schéma, ou lors d’une désinstallation.
Si elles sont définies dans ce fichier, les deux fonctions de mise à jour sont alors exécutées :
* `prefixe_upgrade()` : upgrade à une nouvelle version. Reçoit 2 arguments : `$nom_meta_base_version` (la version de schéma du plugin actuellement installé) et `$version_cible` (la version du schéma vers laquelle on fait l’upgrade).

Que demander de plus ?

Pour un vidage encore plus violent tu peux aussi éventuellement faire

// purge le répertoire des squelettes, CSS et JS
purger_repertoire(_DIR_SKELS);
purger_repertoire(_DIR_VAR . 'cache-css');
purger_repertoire(_DIR_VAR . 'cache-js');

Merci à vous tous pour ces pistes.
Ce code dans le fichier prefixe_administrations.php vous parait-il correct ?

function escal_upgrade($nom_meta_base_version, $version_cible) {
	$maj = array();
	include_spip('escal_fonctions');
	include_spip('inc/config');
	include_spip('action/editer_objet');
	// On invalide les caches
	include_spip('inc/invalideur');
	suivre_invalideur("mise_a_jour_escal");
	purger_repertoire(_DIR_VAR . 'cache-css');
	purger_repertoire(_DIR_VAR . 'cache-js');

etc...

Quelque chose t’a fait penser que tous ces include_spip sont nécessaires ?

Pour tester : inclue cette définition dans ton mes_options et appelle escal_upgrade('a','b'); aussitôt après.
Si ton fauteuil et ton site ne s’effondrent pas dans la minute qui suit et que ça change pas grand chose, en apparence du moins, à la vie de tes voisins non plus, ça pourra paraître correct…
N’oublie pas, alors, de retirer ces 2 lignes de ton mes_options.
Si tes voisins se mettent à pousser des hululements stridents, que le ciel devient violet ou que tiktok se met à réciter la messe en latin, alors ya un truc à corriger.

Euh attends …
Je mets quoi dans mes_options exactement ? Quelles 2 lignes ?
J’appelle comment escal_upgrade('a','b'); ?

Mon canapé en tremble d’avance …

J’ai pas parlé de 2 lignes et d’ailleurs la définition de la fonction telle que tu l’as citée fait une dizaine de lignes. Pour rappel :

Et escal_upgrade('a','b'); ben tu l’appelles comme ça :
escal_upgrade('a','b');

Ben si tu parles de 2 lignes :wink:
Bon ok je copie toute la fonction escal_upgrade de escal_administration.php vers mes_options.php, c’est ça ?

Et ensuite, je l’écris où ce escal_upgrade('a','b');?

ben comme dit

C’est pour tester hein… sur un site qui tourne, et en dehors de toute mise à jour, et après faut le virer

Je teste en local mais je suis un peu perdu :
La fonction escal_upgrade est déjà définie dans escal_administration.php
Dois-je la laisser ou l’enlever pour la recopier dans mes_options.php ?

C’est juste un moyen de tester ton code avant que spip n’en ait réellement besoin.
Tout moyen pour cela fera l’affaire.

Si ça fait une erreur de double définition, tu l’enlèves de escal_administration le temps du test pour qu’il n’y ait pas une double définition.
Sinon tu t’en fous, tu testes, si ya une erreur dans ton code tu la corriges, puis à la fin quand ya pas d’erreur tu l’enleves de ton fichier d’options et tu la remet dans administration si tu l’en avais enlevé, ou tu y met la version corrigée à la place de la version avant correction.

J’ai donc d’abord laissé dans escal_administration.php où j’ai écris :

function escal_upgrade($nom_meta_base_version, $version_cible) {
	$maj = array();
	include_spip('escal_fonctions');
	include_spip('inc/config');
	include_spip('action/editer_objet');
	// On invalide les caches
	include_spip('inc/invalideur');
	suivre_invalideur("mise_a_jour_escal");
	purger_repertoire(_DIR_VAR . 'cache-css');
	purger_repertoire(_DIR_VAR . 'cache-js');

	$maj['create'] = array(
		array('install_groupe_mots'),
		array('install_contenus'),
		array('escal_configuration'),
		array('ecrire_config', 'escal', array())
	);

	$maj['1.0.16'] =array(
		array('update_groupe_mots')
	);

	include_spip('base/upgrade');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
escal_upgrade('a','b');

puis j’ai recalcule la page d’accueil du site local et tout se passe bien à priori , mais je devrais, à mon avis, voir « le cache est vide » dans la page exec=admin_vider et ce n’est pas le cas.

Si j’enlève ce code de escal_administration .php et que je le copie dans mes_options.php, le recalcul de la page me donne une page blanche.
Et sans la ligne escal_upgrade('a','b'); pas de souci.

Si ton site rencontre un problème dans la situation de test, c’est pour attirer ton attention dessus et te permettre de le corriger. Toute la panoplie des outils de debug peut t’y aider, comme vu dans de très nombreuses autres discussions.

Mais après cette suite d’échange, j’ai l’impression que tu ne comprends pas mes indications (ou les posts de maieul) ou ce qu’il y a dans la documentation de spip.net… et que tu ne comprends pas non plus ce que tu fais en suivant mes suggestions.
Mes indications ne sont donc pas adaptées. J’en suis désolé…
Mais je te souhaite bonne chance !

En effet, je ne comprends pas vraiment. Cette fonction m’avait été donnée par Arnaud Bérard à l’époque.
Ce que je ne comprends surtout pas, c’est que ma fonction upgrade sans modification fonctionne bien et que si je la copie sans modification vers mes_options.php et que j’ajoute la fameuse ligne escal_upgrade('a','b');, j’obtiens une page blanche.

En tout cas, merci beaucoup pour ton aide.