Как программно обновить кэш определённого ресурса

Имеется ресурс с id = 950000
Как с помощью modx'ового cacheManager'а обновить (создать) кэш этого ресурса?

$cacheManager = $modx->getCacheManager();
а дальше ?
Cyrax_02
27 июня 2014, 13:07
modx.pro
1
3 458
0

Комментарии: 9

    Cyrax_02
    27 июня 2014, 19:42
    0
    $resourceId = 950000
    $resource = $modx->getObject('modResource', $resourceId);
    $cacheKey = $resource->getCacheKey();  // возвращает mgr/resources/950000
    
    $cacheManager = $modx->getCacheManager();	            
    $cacheManager->refresh(array('resource' => array('key' => $cacheKey)));
    Физически кэш ресурса не создаётся. Проверил непосредственно в папке core/cache/resource — пусто

    Пробовал и так:
    $resourceId = 950000
    $cacheKey = "web/resources/950000";
    $cacheManager = $modx->getCacheManager();	            
    $cacheManager->refresh(array('resource' => array('key' => $cacheKey)));
    Тоже кэш ресурса не создаёт. Проверил непосредственно в папке core/cache/resource — пусто

    Может, refresh пересоздаёт кэш только если он уже существует?
    Мне необходимо создать кэш ресурса. Если кэш существует, то обновить.
      Cyrax_02
      27 июня 2014, 19:51
      0
      Все эти действия выполняются в контексте `mgr`.
        Василий Наумкин
        27 июня 2014, 21:38
        +1
        Это удаляет кэш ресурса.

        Создан он будет при первом же обращении. Самый простой способ — запросить страничку через wget.
          Володя
          27 июня 2014, 22:36
          0
          тогда в случае с одним ресурсом наверно проще
          $cacheManager->delete($cacheKey)
          ?
          Я вообще по наивности глядя на название тоже думал что он обновляет…
            Василий Наумкин
            27 июня 2014, 23:01
            0
            Может изначально так и должно было быть, но в итоге — вот так.

            MODX не совершенен :-(
        Cyrax_02
        27 июня 2014, 20:10
        0
        В логах пусто. И в логах modx (включены все сообщения от warnings и серьёзнее), и в логах php.
          Cyrax_02
          28 июня 2014, 11:18
          0
          Пока вижу 3 варианта обновления кэша ресурса:

          1. Через file_get_contents:
          $resourceId = 950000;
          $resource = $modx->getObject('modResource', $resourceId);
          $context = $resource->get('context_key');
          $url = $modx->makeUrl($resourceId, $context, '', 'full');
          $content = file_get_contents($url);  // загрузка страницы ресурса с генерацией его кэша

          2. Генерация кэша ресурса через modxCacheManager->generateResource()
          3. Использование внешней утилиты wget

          1-й способ — самый затратный по времени, т.к. придётся ждать полной загрузки страницы:
          — выполняться будут не только кэшируемые элементы, но и некэшируемые (а для получения кэша ресурса некэшируемые элементы выполнять вовсе не нужно — это лишняя трата времени)
          — придётся ждать полной загрузки данных со сторонних ресурсов (а сторонние ресурсы могут отдавать данные криво и долго)

          2-й способ работает быстрее, т.к. выполняются только кэшируемые элементы.

          3-й способ (wget), интересен тем, что можно запустить процесс загрузки страницы ресурса (как в 1-м способе), но при это не ждать завершения загрузки. Т.е. можно будет всего лишь инициировать процесс загрузки (обновления кэша) в отдельном потоке и продолжить выполнение своего кода.

          Всё верно?
            Cyrax_02
            28 июня 2014, 11:25
            0
            Всё-таки самым надёжным и приемлемым в плане скорости является modxCacheManager->generateResource().

            file_get_contents будет выполняться долго, пока не загрузятся все данные страницы. Более того, php-опция allow_url_fopen может быть отключена, тогда функция с url работать не будет.

            А wget — внешняя утилита, которой может не быть в дистрибутиве. И если её запускать в отдельном потоке (асинхронно), то мы не сможем проконтролировать успешность обновления кэша. Если её запускать синхронно, то имеют место все недостатки file_get_contents'а.

            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            9