Подтвердить что ты не робот

Что означает "недействительный" кеш в Magento?

В администраторе Magento под управлением Cache, что это означает, когда он показывает, что кеш считается недействительным? Как Magento знает, что кэш недействителен? В частности, мне интересно, как кэшировать блок HTML. Какие условия могут привести к тому, что этот кеш окажется недействительным?

4b9b3361

Ответ 1

В Magento всякий раз, когда вы вносите изменения в продукты, статические блоки и т.д., он распознает, что данные в базе данных больше не то же самое, что и в кеше. К сожалению, Magento не понимает, что то, что данные кэша разные, просто что-то отличается.

Вам нужно будет войти в систему > Управление кешем и обновить типы недействительных кешей.

EDIT:

Создайте модуль (или используйте существующий модуль), который вы можете использовать для настройки задания cron для обновления кеша. Создать файл: {namespace}/{modulename}/Model/Observer.php

Внутри этого файла:

<?php
class <namespace>_<modulename>_Model_Observer {

  public function refreshCache() {
    try {
      $allTypes = Mage::app()->useCache();
      foreach($allTypes as $type => $blah) {
        Mage::app()->getCacheInstance()->cleanType($type);
      }
    } catch (Exception $e) {
      // do something
      error_log($e->getMessage());
    }
  }

}

В вашем модуле etc/config.xml:

<config>
  ...
  <crontab>
    <jobs>
      <{modulename}_refresh_cache>
        <schedule><cron_expr>* * * * *</cron_expr></schedule>
        <run><model>{modulename}/observer::refreshCache</model></run>
      </{modulename}_refresh_cache>
    </jobs>
  </crontab>
  ...
</config>

Теперь, пока cron настроен правильно на вашем сервере, кеш будет обновляться автоматически, так же часто, как работает cron.

Ответ 2

2015: AOE Sheduler умеет очищать кеш из cronjob. Изменить JOB

"core_clean_cache"

от 30 2 * * * (ежедневно 2:30) до 59 * * * * (каждые 59 минут).

Ответ 3

Ответ @Magento Guy правильный, но я думаю, что это решение ниже поможет вам обновить только недействительные кеши на Magento.

Я использую Bitnami Magento Stack, для меня это решение ниже было лучшим, что я нашел.

Я пытался создать файл php Mage_Shell_Class, но безуспешно (недопустимый массив кеша всегда был пуст, когда он запускался, несмотря ни на что, и я действительно не представляю, почему).

Я создал файл php 'sample.php':

<?php

require 'app/Mage.php';

$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes();

foreach($invalid as $i)
{
    Mage::app()->getCacheInstance()->cleanType($i["id"]);
}

Я поместил его в корневую папку magento, и для его запуска я использую cronjob, который выполняется под пользователем root.

Итак, чтобы создать cronjob для пользователя root:

sudo crontab -u root -e

И это была моя командная строка для ее запуска:

* * * * * . /opt/bitnami/scripts/setenv.sh ; /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/sample.php >> /var/log/cron/cron.log 2>&1

Некоторые части этой строки очень специфичны для моей проблемы:

  • Поскольку он просто обновляет недействительные кеши, я решил запустить его каждую минуту.
  • setenv.sh - это script, который помогает мне устанавливать среду при работе с этим конкретным стеком битнами.
  • Чтобы получить вывод этого script, я использовал эту последнюю часть " → /var/log/cron/cron.log 2 > & 1", чтобы выводить ошибки в каталог, который я создал (/var/log/cron) и дал правильные разрешения на него.

Возможно, вам нужно изменить команду cron line, но я думаю, что это поможет вам.