it-swarm-eu.dev

Cache problem: update node

Provozuji web Drupal 7 s aktivovanými stránkami „Cache stránky pro anonymní uživatele“ a „Cache bloky“). „Minimální životnost mezipaměti“ i „Vypršení platnosti stránek v mezipaměti“ jsou nastaveny na 1 den.

Když aktualizuji uzel, například upravím obrázek a navštívím tuto stránku jako anonymní uživatel, nový obrázek se nezobrazí. Když ručně vymažu mezipaměť, stránka se zobrazí tak, jak má být. Je to jako by mezipaměť nebyla vymazána po aktualizaci uzlu.

Výpis z API:

modules/node/node.pages.inc

function node_form_submit($form, &$form_state) {
  $node = node_form_submit_build_node($form, $form_state);
  $insert = empty($node->nid);
  node_save($node);

  // Do stuff...

  // Clear the page and block caches.
  cache_clear_all();
}

Všimněte si, že po uložení uzlu je vyvolána funkce cache_clear_all, bez ohledu na to, zda je třeba uzel vložit nebo aktualizovat.

Další kontrola API odhaluje následující:

modules/node/node.module

function node_save($node) {

  ...

    // Save the node and node revision.
    if ($node->is_new) {
      drupal_write_record('node', $node);
      ...
    }
    else {
      drupal_write_record('node', $node, 'nid');
      ...
    }

    ...

    // Clear the static loading cache.
    entity_get_controller('node')->resetCache(array($node->nid));

  ...
}

Znovu se zdá, že je vše tak, jak by mělo být. Mezipaměť je vymazána pomocí Entity API (public DrupalDefaultEntityController::resetCache(array $ids = NULL)).

Zdá se, že v kódu není nic špatného. Možná kód nevymaže všechny potřebné mezipaměti?

5
Bart

Problém je v tom, že máte nastavenou minimální životnost z 1 den . To znamená, že cache_clear_all() neodstraní záznamy s životností kratší než jeden den. Zkuste to nastavit na 1 hodinu nebo něco přijatelnějšího pro váš web (např. Jak dlouho mezi novým obsahem nebo upraveným obsahem a kdy anonymní uživatel potřebuje vidět obsah).

3
jhedstrom

Pomocí db_delete() můžete vymazat tabulku db „ručně“ bez ohledu na minimální životnost.

0