Воспользовался полезной статьёй Дружаева Владимира (Otshelnik-Fm)
и скопировал через FTP записи лога на 06.12.2019 г.
Не уверен, что выбрал правильное место для публикации этого поста - поправьте, пожалуйста, если написал не туда.
Вот что обнаружил в записях лога:
05:57:19 get_subtab: Не удалось загрузить контент вкладки Array ( [name] => otfm_count_procent_subtab )
16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 8245 [object_author] => 1 [rating_type] => attachment [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 8246 [object_author] => 1 [rating_type] => blog [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5819 [object_author] => 1 [rating_type] => attachment [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 2109 [object_author] => 1 [rating_type] => comment [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5820 [object_author] => 1 [rating_type] => blog [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5784 [object_author] => 1 [rating_type] => attachment [rating_value] => 0 ) 16:23:25 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5785 [object_author] => 1 [rating_type] => blog [rating_value] => 0 ) 16:23:26 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5744 [object_author] => 1 [rating_type] => attachment [rating_value] => 0 ) 16:23:26 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5745 [object_author] => 1 [rating_type] => blog [rating_value] => 0 ) 16:23:26 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5721 [object_author] => 1 [rating_type] => attachment [rating_value] => 0 ) 16:23:26 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5722 [object_author] => 1 [rating_type] => blog [rating_value] => 0 ) 16:23:26 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 5681 [object_author] => 1 [rating_type] => blog [rating_value] => 0 )
Насколько всё критично и как это исправить? Заранее спасибо за совет.
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Здравствуйте.Нужно понимать как и что в этот момент времени происходило.
Как мне воспроизвести то что у вас с рейтингом провалилось?
Здравствуйте.
Спасибо, что откликнулись.
Какие данные мне нужно предоставить, чтобы возникло понимание происходящего?
Где посмотреть?
Надо знать какие действия были в этот час и минуту.
Взять пример:
[object_id] => 5681 [object_author] => 1 [rating_type] => blog [rating_value] => 0
rating_type - тип рейтинга blog. Что это за blog?
object_id - id объекта. Возможно это id записи.
object_author = 1 - id юзера. 1 - админ.
Вот и дайте нам информацию что вы делали в этот момент.
Без понимания что происходило - остается игнорировать эти сообщения.
Вы проблемы в работе рейтинговой системы наблюдаете?
Как я и писал в статье - не все что пишется в лог - ошибка. Возможно это отладочная информация.
Вот еслиб вы пришли на форум написав - "у меня рейтинг автору не начисляется". А у вас он работает?
А может быть дело в rating_value = 0
- понятно что не удалось обновить рейтинг. Ведь пришел ноль. Нечего обновлять. Думаю можно игнорить это сообщение. Если и вправду все работает
Что это за blog?
Это кастомная форма публикации.
Вы проблемы в работе рейтинговой системы наблюдаете?
Да. Возникла странная ситуация (но не с кастомным блогом, а с обычным типом записи "post"): на неё обратил внимание пользователь сайта.
В первых комментариях к записи (примерно 4-5), не сохраняются лайки.
Процесс такой:
пользователь ставит лайк и он отображается под комментарием. Когда хочешь посмотреть, кто поставил лайк - цифра с лайком не активна и посмотреть невозможно. После перегрузки страницы лайк пропадает, и вместо поля "лайк-дизлайк" отображается разрушенное сердечно с нулём. Лайкнуть комментарий теперь вообще не представляется возможным. После 4-5 комментариев все лайки ставятся/отображаются в штатном режиме.
Это происходит под несколькими записями, например,
Вот на момент такого происшествия и надо дать выписку из лога. Возможно там будут другие данные.
Сейчас проголосовал там - да, проблему наблюдаю. Не выводится в самом комментарии голос после обновления страницы
Ушел такой запрос:
action=rcl_edit_rating_post&rating=b2JqZWN0X2lkOjUyNzQsb2JqZWN0X2F1dGhvcjoxMjY5LHJhdGluZ190eXBlOmNvbW1lbnQsdXNlcl9pZDo3NjUscmF0aW5nX3N0YXR1czpwbHVz&ajax_nonce=e51050ba97
Это декодированные данные:
object_id:5274,object_author:1269,rating_type:comment,user_id:765,rating_status:plus
А сервер вернул:
{"result":100,"object_id":"5274","rating_type":"comment","rating":"<span class="rating-plus">3</span>","output_type":"0"}
т.е. в запросе и ответе все отработало как и должно, но почему после обновления страницы все становится по нулям - я не понимаю.
Вот скрин
Искать надо начиная с малого - отключения стороннего, переключения темы ВП. Может это какой хитрый кеш работает?
У пользователя в профиле я вижу что голос засчитался 07 декабря 2019 Coda Sel голосовал: 1
Спасибо большое, Владимир, что вникли в суть проблемы 🔧
Искать надо начиная с малого - отключения стороннего, переключения темы ВП. Может это какой хитрый кеш работает?
Да, согласен, но сейчас проходит литературный конкурс до конца декабря, поэтому ничего пока отключать не буду: народ тусит на сайте - как бы не сделать ещё хуже.
В общем, понятно, что ничего не понятно))
Ну вот смотрите - я голосовал сегодня. В реколл логах на этот момент есть ошибки?
Я думаю нет - т.к. в профиле пользователя я вижу зачтённый рейтинг. А вот то что он со страницы публикации пропадает - это какой-то кеш, как мне кажется. Значит в первую очередь смотрим в кеширование сервера, плагинов кеширования или что еще может быть...
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Ну вот смотрите - я голосовал сегодня. В реколл логах на этот момент есть ошибки?
Пока проверить сложно: сейчас в логах последняя информация отображается на 13:42:24.
Есть только такая подозрительная запись:
00:22:12 get_subtab: Не удалось загрузить контент вкладки Array ( [name] => otfm_count_procent_subtab )
Из плагинов кэширования установлен такой: WP Super Cache.
Попробовать его деактивировать и снова проголосовать в проблемной зоне?
в логах последняя информация отображается на 13:42:24.
Есть только такая подозрительная запись:00:22:12 get_subtab:
но это 12 ночи (00:22), а не 13:42
Попробовать его деактивировать
очистить кеш, отключить плагин кеширования. Возможно на сервере ещё какой кеш есть -я не знаю что у вас там
но это 12 ночи (00:22), а не 13:42
Я не связывал "подозрительную запись" с датой отображения последних событий в логах.
"Подозрительная запись" была сделана в 00:22:12, а последняя запись - в 13:42:24, только в ней не было ничего подозрительного, поэтому я не приводил эти данные:
13:42:24 Запуск событий крона rcl_cron_hourly
очистить кеш, отключить плагин кеширования.
Хорошо, попробую и отпишусь.
P.S. Очистил кэш, отключил плагин. Проголосовал последний свободный комментарий (четвёртый по счёту) - ситуация не изменилась.
Теперь все первые пять комментариев недоступны для рейтинга, а начиная с шестого - проблем не наблюдается.
Проблемы у допа есть.
Вот например:
Там стоит заменить:
if ( !$result )
на
if ( $result === false )
Так же проблемы будут у тех, кто использует объектное кеширование (например memcache) т.к. в дополнении зачастую значения записываются в кеш, но не сбрасываются при совершении некоторых действий. Там надо либо вообще убрать все wp_cache_get / wp_cache_add / wp_cache_delete либо добавить их везде где следует
Изменив код вы только перестанете записывать данные, что в первом посте, в логи.
Вообще у вас странный лог.
Вот я сделал такую же ошибку и у меня лог был такой:
17:42:15 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 1874 [object_author] => 88473 [rating_type] => post [user_id] => 1 [rating_status] => plus [rating_value] => 0 [rating_date] => 2019-12-07 18:40:53 )
Так что у вас либо старая версия допа какая-то, либо вы меняли код, либо вы сами регистрировали типы рейтинга и, как вариант, сделали что-то не так.
Так что у вас либо старая версия допа какая-то, либо вы меняли код, либо вы сами регистрировали типы рейтинга и, как вариант, сделали что-то не так.
1. У меня версия 3.1.0. Обновляю все допы регулярно (кроме VIP) В самом дополнении
на CODECELLER указано Обновление: 3 года назад, Версия файла: 2.0.3
2. Сам я код менять не умею и не делал этого.
3. Что значит "регистрировать типы рейтинга"? Я только настраивал рейтинг в настройках WP-Recall.
[rating_type] => blog
[rating_type] => attachment
таких рейтингов по дефолту нет, вы или кто-то другой вам их добавлял.
Так же у весь идет попытка кучу раз изменить рейтинг за 1 секунду, что то же не нормально. У вас либо посещаемость миллион, либо какой-то код пытается выдать рейтинг кучу раз, ну или еще что. Вообщем это, скорее всего, у вас что-то, я не могу никак воспроизвести такое
Preci сказал(а)
[rating_type] => blog
[rating_type] => attachmentтаких рейтингов по дефолту нет, вы или кто-то другой вам их добавлял.
Да, точно! Рейтинг blog создал действительно я, воспользовавшись
Вполне возможно, что где-то накосячил, хотя постарался в точности следовать инструкции.
А что такое [rating_type] => attachment я сам не знаю 🙂
Так же у весь идет попытка кучу раз изменить рейтинг за 1 секунду, что то же не нормально. У вас либо посещаемость миллион, либо какой-то код пытается выдать рейтинг кучу раз, ну или еще что. Вообщем это, скорее всего, у вас что-то, я не могу никак воспроизвести такое
Печалька 🙁 А как это починить?
Сделайте скриншот полных настроек системы рейтинга
Так же, можете открыть файл:
/wp-content/plugins/wp-recall/add-on/rating-system/core.php
Где то на 438 строчке найти там:
if ( ! $result ) { rcl_add_log( 'rcl_update_user_rating: ' . __( 'Failed to change general rating of the user', 'wp-recall' ), $args ); }
и заменить на:
if ( ! $result ) { global $user_ID; $tmp = $args; $tmp['extend']['target_user_rating'] = rcl_get_user_rating_value( $args['object_author'] ); $tmp['extend']['cur_user_id'] = $user_ID; $tmp['extend']['ref'] = $_SERVER['HTTP_REFERER']; $tmp['extend']['post_data'] = base64_decode($_POST['rating']); rcl_add_log( 'rcl_update_user_rating: ' . __( 'Failed to change general rating of the user', 'wp-recall' ), $tmp ); //rcl_add_log( 'rcl_update_user_rating: ' . __( 'Failed to change general rating of the user', 'wp-recall' ), $args ); }
тогда лог будет более полный и будет проще понять в чем проблема
Стоило картинки под спойлер убрать.
Да, не сообразил, спасибо. Впредь буду умнее.
Теперь мониторьте логи и если опять будет ошибка "rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя" - скидывайте логи, посмотрим
Хорошо, спасибо!
Пока нет свежих данных на момент внесения изменений: сейчас логи на 20:42:28
Preci сказал(а)
Теперь мониторьте логи и если опять будет ошибка "rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя" - скидывайте логи, посмотрим
Свежие логи:
21:52:38 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 9096 [object_author] => 910 [rating_type] => attachment [rating_value] => 0 [extend] => Array ( [target_user_rating] => 727.1 [cur_user_id] => 910 [ref] => https://taboo-story.com/rcl-postedit/?rcl-post-edit=9097 [post_data] => ) ) 21:55:02 rcl_update_user_rating: Не удалось изменить общий рейтинг пользователя Array ( [object_id] => 9109 [object_author] => 910 [rating_type] => attachment [rating_value] => 0 [extend] => Array ( [target_user_rating] => 727.1 [cur_user_id] => 910 [ref] => https://taboo-story.com/rcl-postedit/?rcl-post-edit=9097 [post_data] => )
Preci сказал(а)
У вас есть какой-то код, который начисляет рейтинг за публикацию записей?
Эм... у меня есть кастомная настройка, которая позволяет начислять рубли на личный счёт автору определённой записи (платной или категории "Exclusive"), за выставленный этой записи рейтинг, за просмотры записи, и за комментарии к этой записи другими пользователями.
Смотрите, у вас на странице
Юзер с ID 910 совершил какие-то действия и из-за этого произошла попытка начисления рейтинга самому себе. Т.к. в post_data ничего нет - значит "rating" не передалось, а значит это, скорее всего, отработал какой-то ваш код, когда юзер обновлял запись или загружал в нее картинки (картинки - то же записи)
Можете попробовать в коде, который вы заменили, изменить
$tmp['extend']['post_data'] = base64_decode($_POST['rating']);
на
$tmp['extend']['post_data'] = $_REQUEST;