Front office не кэширует, backoffice кэширует.

Автор BSD-shnik, 24 июля 2016, 20:05:35

« назад - далее »

BSD-shnik

Хочу уточнить, верно ли я понимаю схему кеширования.

OPcache -  кеширует байт-код php
smarty кеш - скомпиллированные шаблоны
Кеширование ( воём случае Memcached через PHP::Memcache) - кеширует скомпиллированные (готовые) страницы, запрашиваемые пользователем.

И, собственно, по теме:
Где в базе проверить значения для SMARTY кеширования?


BSD-shnik

#16
Решено.
Причина проблемы - несоответствие значений в базе значениям, установленным на странице опций.
Кнопка Кеш в положении "ДА", но значение в базе = 0.
Радио - переключатель (точка) у строки "Перекомпилировать файлы шаблонов если файлы были обновлены", но значение в базе = 0.

Решение:
Кеш
1. Поиск по базе
Смотрим код элемента - кнопки Кеш на странице произв-ть. Видим - <label for="smarty_cache_on">Да</label>
Соответственно, в базе ищем PS_SMARTY_CACHE
2. Изменение значения
Находим - таблица ps_configuration, значения PS_SMARTY_CACHE исправляем с ноль на 1.
Обновляем гл. страницу, видим -  Smarty Cache   enabled

Компиляция шаблонов
1. Поиск по базе
Смотрим код элемента переключателя - <input type="radio" name="smarty_force_compile"..........
Соответственно, в базе ищем PS_SMARTY_FORCE_COMPILE
2. Изменение значения.
Находим - таблица ps_configuration, значения PS_SMARTY_FORCE_COMPILE исправляем с ноль на 1.

Обновляем гл. траницу, видим -  Smarty Compilation   auto


Америки не открыл, действия элементарные, но их описание может оказаться полезным кому - нибудь.
Ну а с MySql  буду заниматься позже. Ведь причина ошибок должна быть. Почему возможно такое поведение системы, когда после установки той или иной опции, значение в базе не меняется, ну или не соответствует требуемому? .....
Но это уже другая тема.

Спасибо за помощь!!!!









BSD-shnik

#17
Вынужден продолжить тему, проблема глубже.
Решение относилось чисто к переключению режимов кеширования.
При выборе режимов

Smarty Cache   enabled,
Smarty Compilation  auto или never recompile


сайт работает с ошибками. Исчезает главное меню, главный баннер отображается где попало, хук с категориями товаров съезжает и прочее.
После очистки кеша первая загрузка корректная, последующие с ошибками.
При выборе
Smarty Cache   enabled
Smarty Compilation   force compile


Работает без ошибок. Понятно, что разрешать смарти кэш и принудительную компиляцию бесмысленно, но с диагностической точки зрения может быть полезно.

Вопрос - почему корректно скомпиленные страницы из кеша выдаются с ошибками? И что предпринять для устранения проблемы?
 

mAgency

Лог ошибок проверйте. Когда проблемы со smarty, то в нем есть записи о том в каких шаблонах проблемы
[error] ...  Trying to get property of non-object in /tools/smarty/sysplugins/.... Undefined property:....
По ним можно определить в каких шаблонах/модулях проблемы.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

BSD-shnik

#19
mAgency
Логи проверял, пусто. Но почему проблемы в шаблонах, если принудительная компиляция возвращает всё корректно? И после очистки кеша первая загрузка ОК.....

Adik


BSD-shnik

Adik
Нет, тема не стандартная. Поддержка темы кончилась.....

BSD-shnik

Залил сайт на вирт.машину, с php-5.4. Оказалось, что php-5.4 обрабатывает кеш нормально, на всех режимах.
То есть, проблема с шаблонами. Есть какие-нибудь идеи? Как можно заставить нормально работать кеш, из которого на  php-5.4. всё ОК, на 55 и 56 глюки......
На уровне байт кода, похоже, всё нормально, OPcache отключал, результат аналогичный. Проблема именно со Smarty Compilation.

Откат к php5.2 - php5.4 не устраивает. Обязательно шаблоны переписывать?

BSD-shnik

Если конкретно, то протокол скриптом выдаёт ошибки вида:

25 Aug 2016 09:24:17","/classes/Media.php:
  289","(Warning) filemtime(): stat failed for /themes/Storesmart/css/grid_prestashop.css"

В общем, слетели стили и скрипты. То есть, не так фатально всё.

Кусок кода, где ошибка

if (!@filemtime($file_uri) || @filesize($file_uri) === 0) {
                if (!defined('_PS_HOST_MODE_')) {
                    return false;
                } elseif (!@filemtime($file_uri_host_mode) || @filesize($file_uri_host_mode) === 0) {
                    return false;
                } else {
                    $media_uri = $media_uri_host_mode;
                }
            }

Adik

Тему нужно проверить. Prestashop работает без проблем на php 5.4 - 5.6. Наоборот c php 5.2 проблемы.

DarinSr

Цитата: BSD-shnik от 25 августа 2016, 17:02:50
Залил сайт на вирт.машину, с php-5.4. Оказалось, что php-5.4 обрабатывает кеш нормально, на всех режимах.
То есть, проблема с шаблонами. Есть какие-нибудь идеи? Как можно заставить нормально работать кеш, из которого на  php-5.4. всё ОК, на 55 и 56 глюки......
На уровне байт кода, похоже, всё нормально, OPcache отключал, результат аналогичный. Проблема именно со Smarty Compilation.

Откат к php5.2 - php5.4 не устраивает. Обязательно шаблоны переписывать?
Проблема не в prestashop. Проверено не раз, с prestashop никаких проблем нет у php-5.4., 5.5 и 5. 6 (последняя стабильная версия prestashop).
Скорее всего проблема в конфигурации php и установленных библиотеках.

BSD-shnik

#26
Причина проблемы:
Ошибки при загрузке изображений (и возможно ещё каких-то файлов, ещё не знаю каких)
Например, файл 755-main_product.jpg - его url выглядит так
https://сайт/img/p/7/5/5/755-main_product%3Cbr%20/%3E%20%3Cb%3ENotice%3C/b%3E:%20Undefined%20index:%20product_picture_type%20in%20%3Cb%3E%20:%20eval()'d%20code%3C/b%3E%20on%20line%20%3Cb%3E79%3C/b%3E%3Cbr%20/%3E%20.jpg
соответственно, файл не найден.
В протоколе скриптом
prestashop/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code:
Т.е ф-ция eval() не верно генерит путь.

Кусок кода smarty_internal_templatebase.php(157)

if (!$_template->compiled->exists || ($_template->smarty->force_compile && !$_template->compiled->isCompiled)) {
                        $_template->compileTemplateSource();
                        $code = file_get_contents($_template->compiled->filepath);
                        eval("?>" . $code);
                        unset($code);
                        $_template->compiled->loaded = true;
                        $_template->compiled->isCompiled = true;
                    }


true менял на false, менял условия проверки, бестолку.

Как заменить здесь eval() и чем? include() ? но будет ли работать база и кеш?

Миколас

755-main_product%3Cbr%20/%3E%20%3Cb%3ENotice%3C/b%3E:%20Undefined%20index:%20product_picture_type%20in%20%3Cb%3E%20:%20eval()'d%20code%3C/b%3E%20on%20line%20%3Cb%3E79%3C/b%3E%3Cbr%20/%3E%20.jpg
Это какое название у исходника было чтобы так его переименовало?
Проще названия картинок давать нормальные.

DarinSr

В файле /config/defines.inc.php выключите показ ошибок
define('_PS_MODE_DEV_', false);
Тогда таких url быть не должно.
Это не решит проблему с ошибкой загрузки изображений.
Заменять функцию ненужно, лучше ошибку найти в шаблонах. Может тег не закрыт, может синтакс. ошибка и т.д., вариантов море.


BSD-shnik

#29
Отображение ошибок не проблема. По поводу имён файлов..... загружаемый ч-з админку файл сохраняется системой и переименовывается. (имя файла выше) Каким образом следует "давать" имена файлам и что следует предпринять для исключения подобной генерации адреса?

А вообще, странно, почему во время принудительной компиляции ошибок нет? Если шаблон "кривой", ошибки будут в обеих случаях. Я не прав? Кроме того, из кэша выдаётся одна и та же страница, не зависимо от адреса. Например, после загрузки главной страницы жмём любую из ссылок, в меню, картинку товара, без разницы, грузится снова главная. Та же ситуация с любой из страниц, кроме самописных html страниц. Если бы по любой ссылке возвращалась главная это одно, но после очистки кеша можно загрузить, скажем, товар, включить Smarty Compilation auto и ч-з любую ссылку на загруженной странице получать эту же страницу.

На мой взгляд, это говорит о проблеме с настройкой кеширования.