Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

После обновления до версии 102.3 перестали выводиться записи на страницах категорий #326

Open
trommo opened this Issue Mar 4, 2019 · 52 comments

Comments

Projects
None yet
2 participants
@trommo
Copy link

trommo commented Mar 4, 2019

Обновил сразу несколько сайтов с различных версий 0.9* до 102.3 по причине обновления ПО на сервере. Первый же баг, который был замечен - это прекращение вывода списка записей на страницах рубрик:

  1. Ничего не найдено...

Извините, ничего не найдено

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

Сегодня с утра попробовал на пустом домене поставить систему - тот же баг. Можете сами убедиться - u200.org.

Может быть при обновлении ПХП до версии 7.2 надо было какой-либо модуль доставить, чтобы вывод списка записей в категории нормально работал?

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 4, 2019

У вас вообще пустой сайт. Сложно сделать ещё записей?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 4, 2019

Сделал несколько тестовых записей в нескольких категориях - результат тот же.

Страницы меток выводят свои записи: u200.org/tag/метка3.
Страницы категорий - нет.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 4, 2019

На дефолтном шаблоне проверьте. Плагины сторонние ставили? Время сервера проверьте в настройках.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 4, 2019

На дефолтном то же самое, я проверял же уже на нескольких сайтах.
Здесь всё родное, сторонних плагинов нет, за категории отвечает родной category, который входит в сборку.

Что именно с временем сервера надо проверить? У меня такое ощущение, что что-то из софта на сервер не установлено.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 4, 2019

Поставьте дату публикации на вчера и проверьте.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 4, 2019

Изменил у пары записей даты на вчерашнюю и позавчерашнюю - не помогло.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 4, 2019

В настройках служебное проверьте смещение времени.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 4, 2019

Стояло нулевое смещение. Попробовал сначала сдвинуть на +1.00, затем +2.00 - не помогло.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 4, 2019

В логах php ошибки есть?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 5, 2019

Нет, не вижу. Попробую перенастроить сегодня с нуля вывод логов ПХП в отдельный файл. Они сейчас вместе с апачевскими, как я понял, пишутся.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 6, 2019

Настроил вывод ошибок ПХП на сервере - тестовые ошибки, которые я генерирую специально - фиксируются. А вот от нескольких сайтов на MaxSite CMS, у которых не работает вывод записей на страницах категорий, ошибки не выводятся.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 6, 2019

В файле common/page.php в 239 строке
https://github.com/maxsite/cms/blob/master/application/maxsite/common/page.php#L239
уберите комментарий с pr($query_sql); Зайдите на страницу рубрики и увидите sql-запрос. Покажите его.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 6, 2019

Вот что выдало, когда зашел на страницу категории:

SELECT mso_page.page_id, page_type_name, page_slug, page_title, page_date_publish, page_status, users_nik, page_content, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, page_id_parent, users_avatar_url, mso_category.category_name, mso_page.page_id_autor, users_description, users_login
FROM (mso_page)
JOIN mso_users ON mso_users.users_id = mso_page.page_id_autor
JOIN mso_page_type ON mso_page_type.page_type_id = mso_page.page_type_id
JOIN mso_cat2obj ON mso_cat2obj.page_id = mso_page.page_id
JOIN mso_category ON mso_cat2obj.category_id = mso_category.category_id
WHERE page_status = 'publish'
AND mso_category.category_slug = 'drevnosti'
GROUP BY mso_page.page_id
ORDER BY page_date_publish desc
LIMIT 7

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 6, 2019

Тут всё нормально. Попробуйте выполнить этот запрос в БД через phpMyAdmin. Если возвращает ноль записей, значит что-то с самой базой. Других вариантов просто не вижу.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 6, 2019

Кстати, версия MySQL какая?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 6, 2019

После введения в консоли команды mysql --version
выводится такое:

mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper

Получается, MySQL забыл обновить?
Потому что когда выполняю запрос в БД через phpMyAdmin, выводит ошибку:

Статический анализ:
Найдено 4 ошибок при анализе.
Ожидалось выражение. (near "(" at position 372)
Неожиданный токен. (near "(" at position 372)
Неожиданный токен. (near "mso_page" at position 373)
Неожиданный токен. (near ")" at position 383)
SQL запрос:
=======
повторение самого запроса
=======
Ответ MySQL: Документация
#1055 - Expression #16 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'u200.mso_category.category_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 6, 2019

Скорее всего что-то с режимом MySQL sql_mode.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 7, 2019

В общем дело в новых настройках MySQL 5.7, где по умолчанию включен режим ONLY_FULL_GROUP_BY, что и приводит к ошибке SQL-запроса. Попробуйте в 898 строках заменить код на:

		if ($r['content'])
			$CI->db->select('page.page_id, page_type_name, page_slug, page_title, page_date_publish, page_status, users_nik, page_content, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, page_id_parent, users_avatar_url, page.page_id_autor, users_description, users_login');
		else
			$CI->db->select('page.page_id, page_type_name, page_slug, page_title, "" AS page_content, page_date_publish, page_status, users_nik, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, users_avatar_url, page.page_id_autor, users_description, users_login', false);

То есть нужно убрать category.category_name.

Второй путь — отключить этот режим MySQL на более щадящий.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 9, 2019

Похоже, что дело в обновлении MySQL , начиная с версий 5.7.*...

Из того, что было доступным на stackoverflow.com и помогло мне - пришлось в файл /etc/my.cnf дописывать следующее:

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

После чего перегрузить MySQL на сервере.

Тему можно закрывать, надеюсь, она поможет тем, у кого подобный VPS на Убунту.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 9, 2019

Ну, код движка я принципиально менять не хочу, тогда придётся при каждом обновлении ЦМС его править. Поэтому пока обошлось "малой кровью" с редактированием настроек MySQL...

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 9, 2019

Попробуйте всё-таки мой вариант — я внесу изменения в MaxSite CMS, поэтому ничего править не придется. Я протестировал на своём сервере, проблем с этим кодом нет, но лучше чтобы проверил ещё кто-нибудь. Тут, всё действительно завязано на конфигурацию MySQL 5.7.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 9, 2019

ОК, сейчас сделаю правки в /application/maxsite/common/page.php

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Не знаю, как лучше будет - создавать новый пост или продолжать здесь?

В общем, на обновлённых движках после всех этих обновлений софта на сервере перестали создаваться новые записи - проверил на двух сайтах. В то время как на тестовом домене u200.org, где система была установлена с нуля, всё ОК - записи создаются.

Запись не создаётся ни в одном из предложенных вариантах - ни при публикации, ни в черновик, ни в "личное". При этом сверху появляется красная полоса с текстом "ошибка создания страницы". Проверил лог ПХП - ошибки не выводит.

Нашел, где задаётся вывод этой ошибки, это файл /application/maxsite/admin/plugins/admin_page/new.php, строка 80.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Лучше здесь.

Я вижу, что рубрики теперь нормально выводятся. Но проблема при создании новых записей? Это на существующем сайте или сразу после новой установки?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

На всех сайтах, где было обновление. На тестовом сайте, где я недавно движок с нуля поставил - все ОК, новые записи создаются.

Проверил публикацию вчерашним числом и сдвижку по времени - та же беда, выдает "Ошибка создания страницы" на красной полосе сверху.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

На всех сайтах стоит MySQL 5.7 и последняя версия MaxSite CMS, где внесена приведенная мной правка?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Да, везде из /application/maxsite/common/page.php удалено category.category_name в двух строках и везде MySQL 5.7.*.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Я смог воспроизвести ошибку на тестовом сервере с выводом рубрик, а с созданием записи ошибок не вижу. То есть нужно как-то воспроизвести проблему.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

При создании записи вы какие данные вводите?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Заголовок, тело статьи, отмечаю рубрику - уже даёт ошибку. Если далее заполняю тайтл, дескрипшн, ключевые слова - то же самое. Добавляю короткую ссылку - тоже та же ошибка.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

То есть проблема не только при создании новой записи, но и обновлении существующей?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Нет, обновление существующих происходит без проблем.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Попробуйте в файле maxsite\common\functions-edit.php в строчке 713 раскоментировать
pr($ins_data);

Чуть ниже перед if ($res) добавьте

pr($res);

Что выводится?

@maxsite maxsite closed this Mar 10, 2019

@maxsite maxsite reopened this Mar 10, 2019

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Раскомментировал и добавил, при попытке создания записи выводит следующее:

Array
(
[page_type_id] => 1
[page_id_parent] => 0
[page_id_autor] => 1
[page_title] => Test page
[page_content] => Тест тест тест.
[page_status] => publish
[page_slug] => test-page
[page_password] =>
[page_comment_allow] => 1
[page_ping_allow] => 0
[page_feed_allow] => 1
[page_date_publish] => 2019-03-10 13:46:22
[page_last_modified] => 2019-03-10 13:46:22
[page_menu_order] => 0
)
Потом идет строка с нулём:
0
А ниже - красную полосу с фразой про ошибку создания страницы.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Должно вывести ещё 1 или 0.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Значит не выполняется sql-запрос с INSERT. Тут уже кухня CodeIgniter... Думаю, что нужно включать лог sql-запросов на сервере и там уже смотреть в чём проблема.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Вот что можно сделать. В файле system\database\DB_active_rec.php в строке 1195 после строчки «$sql = ...» допишите:

pr($sql);

Это выведет все сформированные запросы. Что там?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

Между массивом и нулём добавило строку:

INSERT INTO mso_page (page_type_id, page_id_parent, page_id_autor, page_title, page_content, page_status, page_slug, page_password, page_comment_allow, page_ping_allow, page_feed_allow, page_date_publish, page_last_modified, page_menu_order) VALUES ('1', '0', 1, 'Test page', 'dfafasf', 'publish', 'test-page', '', 1, 0, 1, '2019-03-10 16:01:36', '2019-03-10 16:01:36', 0)

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Вроде всё нормально. Попробуйте это запрос в phpMyAdmin выполнить.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 10, 2019

PhpMyAdmin что-то к настройкам времени придирается:

#1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'page_date_dead' at row 1

При этом снова попробовал опубликоваться от прошлого месяца, сместив предварительно настройки времени в "Общих" - та же ошибка.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 10, 2019

Хм... Откуда вообще берется такое значение даты?.. В phpMyAdmin посмотрите в структуре таблицы mso_page какое значение по умолчанию у page_date_dead? Должно быть 2008-01-01 00:00:00.

111

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 11, 2019

Просмотрел для всех сайтов на MaxSite CMS, - везде page_date_dead обнулён, даже в БД тех сайтов, которые уже давно не используются и их домены просрочены. Получается, что это "косяк" обновления MySQL, поскольку в БД сайта u200.org с установленной "с нуля" системой ничего не обнулено, а стоит дата 2008-01-01 00:00:00.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 11, 2019

Скорее всего это очень старые сайты, где могла использоваться такая дата (при установке MaxSite CMS). В MySQL 5.7 такое теперь запрещено, поэтому ошибка и вывалилась. Для это версии базы, если старый сайт, нужно внести правки в таблицу, либо отключать строгий режим MySQL.

Посмотрел по коммитам где было это исправление: 0aa1e23#diff-e0b06e3992ab4c1812c20a5daa4e5c75

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 11, 2019

Ну да. Самому молодому 6 лет в апреле будет. Самому старому - 12. Ещё несколько штук где-то между.

Интересно, когда делали изменения в инсталляционном коде для совместимости с MySQL 5.7 - не было ли подобных жалоб, как в моём случае? Ну по поводу багов у обновлённых сайтов?

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 11, 2019

Не было. Исправление внесли, когда на MySQL кто-то включил строгий режим и мы это выяснили. Просто MySQL 5.7 если и используют, то в нестрогом режиме, поскольку куча сайтов просто посыпится.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 11, 2019

Прошелся по архиву, нашел ветку с подобной проблемой.

Так а все-таки, как-то можно исправить БД уже существующих проектов, чтобы не трогать строгий режим MySQL?

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 11, 2019

Вручную изменил в ПМА на одном из проблемный сайтов нулевую дату у page_date_dead на

2008-01-01 00:00:00

Вроде бы помогло. Сейчас пойду с другими сайтами то же самое сделаю.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 11, 2019

Ну так и нужно — вручную исправлять. :-)

maxsite added a commit that referenced this issue Mar 11, 2019

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 14, 2019

"Наша песня хороша, начинай сначала" (С)

Когда создал новую запись с указанием картинки записи, то последняя не генерируется.

Опять проблема на тех сайтах, которые обновлялись. На тестовом домене, где система установлена с нуля - картинка генерируется.

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 14, 2019

Так путь проверьте, пишет что нет файла или каталога.

@trommo

This comment has been minimized.

Copy link
Author

trommo commented Mar 15, 2019

Папки все есть по пути. Почему-то он файл не создаёт.

Ошибка указывает на файл
/application/maxsite/shared/stock/thumb/thumb.php

В нем на 337 строке следующее:

$image_info = GetImageSize(getinfo('uploads_dir') . $this->new_file);

@maxsite

This comment has been minimized.

Copy link
Owner

maxsite commented Mar 15, 2019

Не знаю. Ошибка же не просто так показывается. Может прав не хватает.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.