Как обработать / очистить устаревшие агрегированные css / js?


17

Я использую только Drupal 7, встроенный в агрегацию CSS / JS, однако папка files, в которой находятся файлы css.gz и js.gz, заполняется довольно быстрыми темпами, и хотя я уверен, что это будет какое-то время прежде чем он начнет полностью заполнять диск, сейчас самое подходящее время, чтобы справиться с ситуацией.

  • Текущее количество файлов в / js составляет 335
  • Текущее количество файлов в / css составляет 451

Есть ли какой-то стандартный метод, который я должен использовать, чтобы справиться с этой ситуацией? Я бы предпочел решение, которое держит Drupal в курсе.

Кроме того, я вижу, что многие из файлов gz имеют не-gz аналоги. Есть ли какая-то причина, по которой файлы .css и .css.gz сохраняются? Может быть, деградация?

Благодарность


Можете ли вы подтвердить, что cron запущен?
mpdonadio

Это, безусловно,
ДанХ

Ответы:


16

Это на самом деле так, чтобы кэшированные страницы с более старыми версиями файлов не ломались. Смотрите этот закрытый вопрос .

TL; DR: они будут автоматически удалены через 30 дней (или независимо от того, на что установлена ​​ваша drupal_stale_file_thresholdпеременная) после того, как они были созданы с помощью drupal_clear_css_cache()и drupal_clear_js_cache(). Таким образом, решение состоит в том, чтобы изменить drupal_stale_file_thresholdзначение до значения, которое меньше 30 дней по умолчанию.

  • Когда удаляются старые файлы

    Старые файлы кэша не удаляются сразу же после очистки переменной поиска, а удаляются по истечении заданного периода с помощью drupal_delete_file_if_stale (). Это гарантирует, что файлы, на которые ссылается кэшированная страница, будут по-прежнему доступны.

drupal_delete_file_if_stale() по умолчанию 30 дней - поэтому, если a) Cron работает правильно и b) вы видите агрегированные файлы старше 30 дней, у вас другая проблема.

variable_get('drupal_stale_file_threshold', 2592000)это 30-дневный чек. variable_set('drupal_stale_file_threshold', 172800)изменит время ожидания до двух дней. На сайте, где обработка кеша строго контролируется, время может быть еще короче.

Источник: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7
Дополнительную drupal_delete_file_if_stale()информацию смотрите в разделе .

  • Есть ли какая-то причина, по которой файлы .css и .css.gz сохраняются?

    Если включено сжатие CSS gzip, включены чистые URL-адреса (что означает, что правила перезаписи работают), и расширение zlib доступно, затем создайте версию этого файла в формате gzip. Этот файл предоставляется условно браузерам, которые принимают gzip с использованием правил .htaccess.

Источник: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7 (в комментариях к функциям)

Также посмотрите, drupal_build_js_cache()что почти идентично drupal_build_css_cache().


Спасибо, я чувствую себя немного ленивым, не глядя сам сейчас;)
Клайв

0

Через 4 года я вынужден не согласиться с первым ответом, где автор утверждает:

Msgstr "Это гарантирует, что файлы, на которые ссылается кэшированная страница, будут по-прежнему доступны."

Возможно, некоторые вещи были изменены / оптимизированы при подготовке к агрегации более старых файлов, но если я вручную удаляю более старый файл на сервере по адресу files / advagg_js (который я, очевидно, все еще использую в одном из моих браузеров), последующая перезагрузка страницы восстанавливает точно такой же файл снова с недавно добавленным исходным кодом javascript, как если бы он drupal_build_js_cache()был выполнен для этого объединенного имени файла.

например. js__22qMV1d_G25luSFBkuR7bIuKD5FE80eKuXx6ldibEixg__yjA2JTeF2f1LUJ3PMdjMr8k9nOPZQJIcvVw-c5Gz_yc__FY0NTHFBVMd9MIGE5srDXTejEZGP-ccSH7UX2zImN-0.js

Таким образом, я пришел к выводу, что установка значительного понижения drupal_stale_file_thresholdне вызовет никаких проблем, и даже удаление всех агрегированных файлов с последующей очисткой кеша вызовет регенерацию агрегатов (проверено и подтверждено, что работа выполняется при перезагрузке страницы)


-5
  • Получить модуль Правила
  • Добавьте новое правило, которое будет выполняться при запуске cron
  • В качестве действия выберите выполнить код php.
  • Напишите код php

Может быть что-то вроде этого:

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

Эти функции PHP могут помочь вам изменить код, как вам нравится.

Будьте очень осторожны перед выполнением этого! Если не используется правильно, вы можете удалить свой сайт! Прежде чем попробовать этот код, протестируйте его на локальном хосте.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.