В администраторе Magento под управлением Cache, что это означает, когда он показывает, что кеш считается недействительным? Как Magento знает, что кэш недействителен? В частности, мне интересно, как кэшировать блок HTML. Какие условия могут привести к тому, что этот кеш окажется недействительным?
Что означает "недействительный" кеш в Magento?
Ответ 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, но я думаю, что это поможет вам.