Come gestire / ripulire css / js aggregati obsoleti?


17

Sto solo usando Drupal 7 integrato nell'aggregazione CSS / JS, tuttavia la cartella dei file in cui vivono i file css.gz e js.gz si sta riempiendo a un ritmo abbastanza rapido, e mentre sono sicuro che ci vorrà un po ' prima che inizi a riempire completamente il disco, ora è il momento migliore per capire la situazione.

  • Il conteggio dei file corrente in / js è 335
  • Il conteggio dei file corrente in / css è 451

Esiste un metodo standard che dovrei utilizzare per affrontare questa situazione? Preferirei una soluzione che mantenga il drupal in loop.

Inoltre, vedo che molti file gz hanno controparti non gz. C'è qualche motivo per cui vengono conservati i file .css e .css.gz? Degrado forse?

Grazie


Puoi confermare che cron è in esecuzione?
mpdonadio

Lo è certamente
DanH,

Risposte:


16

Questo in realtà è di progettazione in modo che le pagine memorizzate nella cache con le versioni precedenti dei file non si rompano. Vedi questo numero chiuso .

TL; DR: verranno eliminati automaticamente 30 giorni (o qualunque sia la drupal_stale_file_thresholdvariabile impostata su) dopo che sono stati creati tramite drupal_clear_css_cache()e drupal_clear_js_cache(). Quindi la soluzione è modificare il drupal_stale_file_thresholdvalore a qualcosa di inferiore ai 30 giorni predefiniti.

  • Quando vengono eliminati i vecchi file

    I vecchi file della cache non vengono eliminati immediatamente quando la variabile di ricerca viene svuotata, ma vengono eliminati dopo un determinato periodo da drupal_delete_file_if_stale (). Ciò garantisce che i file a cui fa riferimento una pagina memorizzata nella cache saranno ancora disponibili.

drupal_delete_file_if_stale() il valore predefinito è 30 giorni, quindi se a) Cron funziona correttamente eb) vedi file aggregati più vecchi di 30 giorni, hai un problema diverso.

variable_get('drupal_stale_file_threshold', 2592000)è il controllo di 30 giorni. variable_set('drupal_stale_file_threshold', 172800)cambierebbe il timeout a due giorni. In un sito in cui la gestione della cache è strettamente controllata, il tempo potrebbe essere ancora più breve.

Fonte: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7
Per drupal_delete_file_if_stale()ulteriori informazioni, consultare.

  • C'è qualche motivo per cui vengono conservati i file .css e .css.gz?

    Se la compressione gzip CSS è abilitata, sono abilitati gli URL puliti (il che significa che le regole di riscrittura funzionano) e l'estensione zlib è disponibile, quindi crea una versione gzip di questo file. Questo file viene offerto in modo condizionale ai browser che accettano gzip utilizzando le regole .htaccess.

Fonte: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7 (nei commenti sulla funzione)

Vedi anche drupal_build_js_cache()quale è quasi identico a drupal_build_css_cache().


Grazie, mi sento un po 'pigro non averlo cercato da solo ora;)
Clive

0

Dopo 4 anni, non sono d'accordo con la prima risposta, in cui l'autore afferma:

"Ciò garantisce che i file a cui fa riferimento una pagina memorizzata nella cache saranno ancora disponibili.".

Forse alcune cose sono state modificate / ottimizzate nel provisioning di aggregazione di file più vecchi, ma se elimino manualmente un file più vecchio sul server su files / advagg_js (che a quanto pare uso ancora in uno dei miei browser), la successiva ricarica della pagina si sta rigenerando esattamente lo stesso file di nuovo con il codice sorgente javascript recentemente aggiunto, come se drupal_build_js_cache()fosse eseguito su quel nome di file aggregato.

per esempio. js__22qMV1d_G25luSFBkuR7bIuKD5FE80eKuXx6ldibEixg__yjA2JTeF2f1LUJ3PMdjMr8k9nOPZQJIcvVw-c5Gz_yc__FY0NTHFBVMd9MIGE5srDXTejEZGP-ccSH7UX2zImN-0.js

Quindi sto concludendo che l'impostazione di un valore significativo inferiore drupal_stale_file_thresholdnon causerebbe alcun problema e anche l'eliminazione di tutti i file aggregati seguiti da una cancellazione della cache forzerà una rigenerazione degli aggregati (testato e confermato lavorando su ricariche di pagine)


-5
  • Ottieni il modulo Regole
  • Aggiungi una nuova regola che verrà eseguita quando cron è in esecuzione
  • Come azione seleziona esegui codice php.
  • Scrivi il codice php

Potrebbe essere qualcosa del genere:

$dir = 'your/directory/';
  foreach(glob($dir.'*.*') as $v){
  unlink($v);
}

Queste funzioni php potrebbero aiutarti a modificare il codice come preferisci.

Fai molta attenzione prima di eseguire questo! Se non utilizzato correttamente, è possibile eliminare il tuo sito! Prima di provare questo codice testarlo su un localhost

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.