Объединение пользователей не удалось: повреждённые записи в базе данных из-за стороннего плагина

Исходное название: Главная страница форума недоступна (пустой экран или 404)

Я являюсь модератором форума SocialHub по адресу https://socialhub.activitypub.rocks — это технологический форум для протокола ActivityPub, который обеспечивает работу социального пространства Fediverse.

В настоящее время уже четвёртый день проходит конференция ActivityPub, и активность на форуме выше обычной. Сегодня утром я заметил, что главная страница форума при прямом доступе по URL отображается как полностью пустой экран (без возврата HTML).

Однако прямые ссылки, такие как Spritely Project: The Super Exciting Future Of Fediverse - ActivityPub - SocialHub, всё ещё работают и предоставляют доступ к другим функциям, например, к поиску и панели администратора. При нажатии на логотип в левом верхнем углу вместо пустого экрана отображается страница 404.

Я уже уведомил ответственных за управление сервером, и, возможно, достаточно будет просто перезагрузить сервер. Но на случай, если кто-то распознает это как более серьёзную проблему, я буду очень благодарен за вашу обратную связь, чтобы мы могли снова запустить форум вовремя до начала докладов на конференции сегодня.

PS. Форум работает на версии v2.6.0.beta1

Возможно, стоит обратить внимание на использование ресурсов. Увеличение числа посетителей означает, что расходуется больше ресурсов.

Увеличение ресурсов сервера поможет справиться с ростом числа посетителей.

Спасибо! Администраторы сервера ещё не онлайн, но я передал им эту ссылку :slight_smile:

Привет, я попытался обновиться до последней версии, но это не помогло, и я также попробовал отключить компонент Force Mobile Homepage, который мы добавили вчера.

Буду признателен за дальнейшие указания. Я изучу логи на предмет соответствующих ошибок…

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

Started GET "/" for 37.172.69.223 at 2020-10-04 07:32:15 +0000
Processing by CategoriesController#index as HTML
Completed 404 Not Found in 281ms (ActiveRecord: 0.0ms | Allocations: 67648)
ActiveRecord::RecordNotFound (Couldn't find all Users with 'id': (36, 50) (found 1 results, but was looking for 2).)
lib/plugin/instance.rb:259:in `public_send'
lib/plugin/instance.rb:259:in `block (2 levels) in add_to_class'
(eval):48:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/categories_controller.rb:61:in `block (2 levels) in index'
app/controllers/categories_controller.rb:40:in `index'
app/controllers/application_controller.rb:354:in `block in with_resolved_locale'
app/controllers/application_controller.rb:354:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Итак, изменение настройки главной страницы с Категории и последние на Категории и избранные вернуло доступ к главной странице. Пока придется обойтись этим… Я подозреваю, что дело во взаимодействии компонентов, но посмотрим. Любые дополнительные пояснения будут очень кстати. Шоу должно продолжаться :slight_smile:

Похоже, проблема возникает при загрузке последних сообщений, что приводит к ошибке 404.

Не менял ли кто-то название этого?

Перейдите в настройки, найдите раздел «Последние» и посмотрите, что произойдет.

Спасибо @IAmGav за предложение: у нас нет кастомизации для любых строк, связанных с «Последние».

Некоторые страницы действительно остаются нерабочими, включая категорию, которая нам на самом деле нужна :frowning:

Учитывая код компонента принудительной главной страницы для мобильных устройств, мне интересно, как проверить, изменилось ли что-то в базе данных, связанное с setDefaultHomepage(settings.homepage);. Но я не думаю, что это повлияет на категорию. Значит, дело в чём-то другом.


Я только что очистил логи, чтобы убедиться, что текущая ошибка действительно не записывается. Похоже, это ошибка, связанная с /latest, /top и категорией #meeting. Не совсем понятно, что происходит… Также проверяю логи внутри контейнера для получения дополнительной информации… Вероятно, это связано с каким-то неработающим постом в категории #meeting

Думаю, проблема заключается в ActiveRecord::RecordNotFound (Не удалось найти все записи Users с 'id': (36, 50) (найдено 1 результат, но ожидалось 2).)

Эти идентификаторы соответствуют учётной записи пользователя, которая была объединена, но, похоже, процесс прошёл с ошибкой…

Я тоже думаю, что это проблема. Не эксперт, но предполагаю, что есть пост со ссылкой на старый аккаунт, который больше не существует (и он отображается в разделах «Лучшее», «Свежее» и в категории конференции). Если дело в этом, возможно, стоит выполнить SQL-запрос для удаления поста или обновления ID пользователя в нём? Какой будет синтаксис?

Фильтр «Объединить пользователей» в действиях администратора не показывает никаких логов. Мне кажется, процесс объединения somehow не удался. @team, как можно расследовать и решить проблему неудачного объединения пользователей? Хотя результат, похоже, хороший: учётная запись пользователя существует с обоими адресами электронной почты. Где-то в некоторых постах должны быть «висящие» ID…

OK, мы сузили проблему до одной темы…

Это может помочь

Нет, там сообщается, что пользователь (источник) не существует. Я подозреваю, что шаг DiscourseEvent.trigger(:merging_users, @source_user, @target_user) не был выполнен. Где можно найти этот код?

Поехали…

[39] pry(main)> PostReplyKey.where(user_id: 36)
=> [#<PostReplyKey:0x0000558954b92d68 id: 9793, user_id: 36, post_id: 3409, reply_key: "00257885-fe73-e76d-09fb-f0f708c2f032", created_at: Sat, 03 Oct 2020 19:37:20 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:37:20 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6e78 id: 9120, user_id: 36, post_id: 3174, reply_key: "b726e441-1c6c-bd60-27ac-8d8d5feef3d7", created_at: Fri, 02 Oct 2020 14:21:48 UTC +00:00, updated_at: Fri, 02 Oct 2020 14:21:48 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6db0 id: 9802, user_id: 36, post_id: 3413, reply_key: "86e179a1-7516-616c-1040-c26c0539f39d", created_at: Sat, 03 Oct 2020 19:41:36 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:41:36 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6ce8 id: 9821, user_id: 36, post_id: 3418, reply_key: "573f48a4-8263-4759-44f0-f6cb26b66f38", created_at: Sat, 03 Oct 2020 20:37:40 UTC +00:00, updated_at: Sat, 03 Oct 2020 20:37:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6c20 id: 9822, user_id: 36, post_id: 3419, reply_key: "9371479c-eeb4-1009-176d-761a854a4ddb", created_at: Sat, 03 Oct 2020 20:40:08 UTC +00:00, updated_at: Sat, 03 Oct 2020 20:40:08 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6b58 id: 9400, user_id: 36, post_id: 3245, reply_key: "e1cd57aa-a811-21f9-5e24-84439e184a8e", created_at: Fri, 02 Oct 2020 21:35:12 UTC +00:00, updated_at: Fri, 02 Oct 2020 21:35:12 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6a90 id: 8613, user_id: 36, post_id: 3067, reply_key: "407edb15-e89d-4369-9fee-1e5eab83385d", created_at: Wed, 30 Sep 2020 13:50:17 UTC +00:00, updated_at: Wed, 30 Sep 2020 13:50:17 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd69c8 id: 9517, user_id: 36, post_id: 3288, reply_key: "140a48d2-1a40-d429-f6e2-2bbe37b4865d", created_at: Sat, 03 Oct 2020 09:54:40 UTC +00:00, updated_at: Sat, 03 Oct 2020 09:54:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6900 id: 9736, user_id: 36, post_id: 3388, reply_key: "76cacf9b-5353-0653-806d-f3c2df6689eb", created_at: Sat, 03 Oct 2020 18:37:11 UTC +00:00, updated_at: Sat, 03 Oct 2020 18:37:11 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6838 id: 8643, user_id: 36, post_id: 3011, reply_key: "6d384213-98db-652c-89eb-1979731bb311", created_at: Wed, 30 Sep 2020 20:55:31 UTC +00:00, updated_at: Wed, 30 Sep 2020 20:55:31 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6770 id: 9772, user_id: 36, post_id: 3400, reply_key: "1e9e0b2e-ecd6-3654-d0da-6e01982a890f", created_at: Sat, 03 Oct 2020 19:22:38 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:22:38 UTC +00:00>]

Так что я попытался разобраться, что с этим делать… Предоставление их существующему пользователю ничего не решает. Удаление тоже ничего не решает.

Следующий шаг: заново собрать затронутые темы, удалить старые и посмотреть, что произойдёт, если у кого-то не появится лучшей идеи…

PostReplyKey относится к адресу для ответа в электронных письмах; он не влияет на рендеринг списка тем.

При анализе стека вызовов видно, что ошибка возникает внутри TopicListSerializer при сериализации, где-то в файле lib/instance/public.rb.

Попробуйте проверить список избранных пользователей темы для старого идентификатора пользователя (набор аватаров, отображаемый на главной странице).

Привет @riking, спасибо за ответ… Насколько мне известно, кроме PostReplyKey, упоминания об этом отсутствующем ID пользователя нет. Но это может быть не настоящий старый ID пользователя, так как я его не знаю. Как вы думаете, как мне его найти — или: что мне стоит искать в логах через grep?

Если речь идет о пользователях, отмеченных в теме, этот запрос должен найти их:

SELECT id
FROM topics
WHERE featured_user1 = 1234
OR featured_user2 = 1234
OR featured_user3 = 1234
OR featured_user4 = 1234
OR last_post_user_id = 1234

Запрос с прежним user_id не вернул результатов, а с новым user_id вернул одну тему — ту самую, которая уже была определена как проблемная. Я переместил тему в другую категорию, и теперь категория ActivityPub Conference 2020 - SocialHub снова отображается.

Теперь я предполагаю, что где-то в данных, связанных с темой 951, есть ссылка на отсутствующий user_id 36, но пока я не смог её найти. Или же есть какая-то другая зависимость, которую я упускаю, касательно пользователя 295?

У вас есть стектрейс этой ошибки?

Ничего больше, кроме того, что я опубликовал в User merge failed, corrupted database entries due to third party plugin - #4 by hellekin и добавил в комментарии после:

О, я пропустил трассировку стека в User merge failed, corrupted database entries due to third party plugin - #4 by hellekin. Значит, ошибка вызвана плагином. Похоже, один из ваших плагинов сохранил какую-то информацию о пользователе, которая не была объединена. Не могли бы вы предоставить список установленных плагинов?