Как поменять папку cache?
Есть несколько сайтов, использующих общий движок и тонны изображений, которые присутствуют на всех них. Контексты были выбраны как вариант, но там появляется проблема переписывания в миллионах мест [[~IDшников]] на новые. Был выбран самый лучший вариант — сделать разные базы данных, в зависимости от домена. Похожие чанки можно хранить в виде файлов и тогда они будут доступны для всех сайтов вне зависимости от БД, а те которые надо чтобы различались, будут оставаться в БД.
И по итогу все ID'шники сохранятся… Но папка кэша. В ней получается будут храниться разные ресурсы с одинаковыми ID. Как изменить папку кэша в зависимости от домена? Она наверняка где-то жестко прописана, плюс в разных дополнениях тоже. Просто раздельные БД — это самый лучший вариант для тех задач, которые мы предусматриваем. И при этом хотим оставить все ID как есть.
И по итогу все ID'шники сохранятся… Но папка кэша. В ней получается будут храниться разные ресурсы с одинаковыми ID. Как изменить папку кэша в зависимости от домена? Она наверняка где-то жестко прописана, плюс в разных дополнениях тоже. Просто раздельные БД — это самый лучший вариант для тех задач, которые мы предусматриваем. И при этом хотим оставить все ID как есть.
Комментарии: 4
1. Переопределить настройку для переноса всего кэша
$modx->setOption('cache_path', 'новый путь к папке кэша');
2. Для более тонкой настройки расширить менеджера кэша, в котором изменить метод modCacheManager::generateResource, чтобы переопределять cacheKey ресурса. По-умолчанию он имеет значение «contextKey]/resources/[id]». Можно указать свой типа «web/$siteName/resources/$obj->id». $siteName определяете сами.
Вау! Очень круто. Правда в файлах заметил, что там вместо этой настройки используется константа
MODX_CORE_PATH . 'cache/'
, поэтому не знаю, будет ли это работать. А еще придумал несколько других вариантов, возможных благодаря симлинкам, которые хостинг как оказалось поддерживает. То есть я могу просто скопировать папку core для каждого сайта, и сослаться на нее в отправных точках (config.core.php), выбирая ее в зависимости от домена, по которому заходят. Или вообще сделать на каждом нужном сайте симлинк на assets/images (естественно при одинаковых ID надо вынести оттуда галерею ms2). Вариантов куча)
Ждет вас разочарование в изменение кэша, а особенно если будите использовать феном в вашей схеме.
Делюсь опытом:
1) для общих страниц используется отдельный контекст, и храните общие страницы там, а подгружаете их в нужные контексты по 404, по алиасу ресурса, причем урлы можно сделать уникальные, чтобы сделать ресурсы максимально непохожими., но стандартная фция формирования url работать не будет в таком случае.
2) для каждого сайта отдельный контекст(можно групировать через отдельную таблицу несколько сайтов на контекст), для этого создал таблицу с урлами откуда потом можно управлять загрузкой и хранить доп параметры, в том числе и настройками конкретного домена.
3)разворачивать можно в отдельном докер контейнере каждый домен отдельно, где в момент подключения вольюма менять фактическое положение кэша на хост машине, в результате чего на уровне контейнера кэш будет изолирован.
4) картинки лучше вынести на отдельные поддомены, чтобы не пложить одинаковые.
Теперь о грусном, это кэш:
как написали выше «contextKey]/resources/[id]» лучше не делать, дело в том что кэш содержит в основном данные ресурса а вашем случае его плодить ненужно.
можно использовать кэш фенома, но он работает довольно скверно и плодит кучу дублей.
смотрел бы в сторону смарти
Делюсь опытом:
1) для общих страниц используется отдельный контекст, и храните общие страницы там, а подгружаете их в нужные контексты по 404, по алиасу ресурса, причем урлы можно сделать уникальные, чтобы сделать ресурсы максимально непохожими., но стандартная фция формирования url работать не будет в таком случае.
2) для каждого сайта отдельный контекст(можно групировать через отдельную таблицу несколько сайтов на контекст), для этого создал таблицу с урлами откуда потом можно управлять загрузкой и хранить доп параметры, в том числе и настройками конкретного домена.
3)разворачивать можно в отдельном докер контейнере каждый домен отдельно, где в момент подключения вольюма менять фактическое положение кэша на хост машине, в результате чего на уровне контейнера кэш будет изолирован.
4) картинки лучше вынести на отдельные поддомены, чтобы не пложить одинаковые.
Теперь о грусном, это кэш:
как написали выше «contextKey]/resources/[id]» лучше не делать, дело в том что кэш содержит в основном данные ресурса а вашем случае его плодить ненужно.
можно использовать кэш фенома, но он работает довольно скверно и плодит кучу дублей.
смотрел бы в сторону смарти
Годные советы, спасибо!
картинки лучше вынести на отдельные поддомены, чтобы не пложить одинаковые.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.