Автор Тема: Front office не кэширует, backoffice кэширует.  (Прочитано 630 раз)

29 Июля 2016, 13:31:57
Ответ #15
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Хочу уточнить, верно ли я понимаю схему кеширования.

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

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

29 Июля 2016, 14:54:14
Ответ #16
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Решено.
Причина проблемы - несоответствие значений в базе значениям, установленным на странице опций.
Кнопка Кеш в положении "ДА", но значение в базе = 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  буду заниматься позже. Ведь причина ошибок должна быть. Почему возможно такое поведение системы, когда после установки той или иной опции, значение в базе не меняется, ну или не соответствует требуемому? .....
Но это уже другая тема.

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








23 Августа 2016, 09:47:01
Ответ #17
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вынужден продолжить тему, проблема глубже.
Решение относилось чисто к переключению режимов кеширования.
При выборе режимов

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


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


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

Вопрос - почему корректно скомпиленные страницы из кеша выдаются с ошибками? И что предпринять для устранения проблемы?
 
23 Августа 2016, 11:00:29
Ответ #18
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22220
  • Репутация: +17111/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Лог ошибок проверйте. Когда проблемы со smarty, то в нем есть записи о том в каких шаблонах проблемы
[error] ...  Trying to get property of non-object in /tools/smarty/sysplugins/.... Undefined property:....По ним можно определить в каких шаблонах/модулях проблемы.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
23 Августа 2016, 13:06:22
Ответ #19
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
mAgency
Логи проверял, пусто. Но почему проблемы в шаблонах, если принудительная компиляция возвращает всё корректно? И после очистки кеша первая загрузка ОК.....
23 Августа 2016, 13:42:50
Ответ #20
  • Ветеран
  • *****
  • Сообщений: 13642
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
23 Августа 2016, 13:58:24
Ответ #21
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Adik
Нет, тема не стандартная. Поддержка темы кончилась.....
25 Августа 2016, 17:02:50
Ответ #22
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Залил сайт на вирт.машину, с php-5.4. Оказалось, что php-5.4 обрабатывает кеш нормально, на всех режимах.
То есть, проблема с шаблонами. Есть какие-нибудь идеи? Как можно заставить нормально работать кеш, из которого на  php-5.4. всё ОК, на 55 и 56 глюки......
На уровне байт кода, похоже, всё нормально, OPcache отключал, результат аналогичный. Проблема именно со Smarty Compilation.

Откат к php5.2 - php5.4 не устраивает. Обязательно шаблоны переписывать?
25 Августа 2016, 18:34:20
Ответ #23
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если конкретно, то протокол скриптом выдаёт ошибки вида:

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;
                }
            }
26 Августа 2016, 09:21:16
Ответ #24
  • Ветеран
  • *****
  • Сообщений: 13642
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Тему нужно проверить. Prestashop работает без проблем на php 5.4 - 5.6. Наоборот c php 5.2 проблемы.
26 Августа 2016, 11:10:51
Ответ #25
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86339
  • Репутация: +25417/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Залил сайт на вирт.машину, с 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 и установленных библиотеках.
26 Августа 2016, 17:50:21
Ответ #26
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Причина проблемы:
Ошибки при загрузке изображений (и возможно ещё каких-то файлов, ещё не знаю каких)
Например, файл 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() ? но будет ли работать база и кеш?
26 Августа 2016, 20:29:59
Ответ #27
  • Ветеран
  • *****
  • Сообщений: 2725
  • Репутация: +64/-4
  • Сообщество PrestaShop
    • Просмотр профиля
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Это какое название у исходника было чтобы так его переименовало?
Проще названия картинок давать нормальные.
27 Августа 2016, 10:55:05
Ответ #28
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86339
  • Репутация: +25417/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В файле /config/defines.inc.php выключите показ ошибок
define('_PS_MODE_DEV_', false);Тогда таких url быть не должно.
Это не решит проблему с ошибкой загрузки изображений.
Заменять функцию ненужно, лучше ошибку найти в шаблонах. Может тег не закрыт, может синтакс. ошибка и т.д., вариантов море.

27 Августа 2016, 13:54:45
Ответ #29
  • Фрилансер
  • *
  • Сообщений: 158
  • Репутация: +5/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Отображение ошибок не проблема. По поводу имён файлов..... загружаемый ч-з админку файл сохраняется системой и переименовывается. (имя файла выше) Каким образом следует "давать" имена файлам и что следует предпринять для исключения подобной генерации адреса?

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

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