Зависание Git и ошибка Oops на странице ошибок для аккаунтов администраторов и модераторов

да, я думаю, что в этом и проблема. LLM считает, что код плохо обрабатывает список записей, отсюда и ошибка 500.

Окей, похоже, мы имеем дело с Contribute > Bug?

Я думаю, что это баг, и, скорее всего, его можно исправить просто, но я не совсем понимаю новые категории. (И лично я не стал бы отправлять код, если чувствую, что не до конца в нём разбираюсь.)

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

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

Ок, я на самом деле не видел топик Contribute > Bug и, насколько я помню, никогда там не писал. К тому же у меня, скорее всего, не тот уровень квалификации, чтобы точно определить, баг это или нет.

Кстати, да, ты, вероятно, прав: могли быть какие-то исторические проблемы с БД, которые спровоцировали эту уязвимость.

Хотя есть необходимость снова получить доступ к админ-аккаунту — и чем скорее, тем лучше, — я полагаю, что это пока в руках богов, но хотя бы источник проблемы мы, возможно, нашли, так что будем надеяться!

Спасибо за помощь. :+1:

Кроме того, я задумываюсь, не даст ли это оснований лишить пользователя статуса администратора и перевести его, например, на уровень модератора — возможно, это обойдёт проблему при входе.

Я, пожалуй, проверю это, предварительно сделав резервную копию.

Меня беспокоит потеря данных или поломка чего-то, что я не смогу проверить, если всё будет выглядеть нормально и не вылетят ошибки. :thinking:

Пожалуйста. Было интересно.

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

Кроме того, по мнению llm, можно использовать консоль Rails, чтобы обновить эту десятисрочную функцию на Ruby и сделать её более надёжной. Это, по крайней мере, должно быть безопасно, потому что после перезапуска реальный код Ruby будет перечитан с диска.

Я хочу сохранить это, чтобы закрыть вкладку — непротестированный код от LLM, представленный здесь как monkey patch для применения в rails-консоли на работающей системе, но также содержащий предложенное LLM решение для этой уязвимости, которая приводит к ошибке:

# Повторно открываем CurrentUserSerializer, чтобы переопределить сломанный метод
class CurrentUserSerializer < ApplicationSerializer
  def has_new_upcoming_changes
    last_visited = object.custom_fields["last_visited_upcoming_changes_at"]
    
    # Извлекаем строку, если она была закэширована как массив предроадером
    last_visited = last_visited.first if last_visited.is_a?(Array)
    
    return false if last_visited.blank? && object.created_at < Discourse.site_creation_date + 1.hour
    cutoff = last_visited.present? ? Time.zone.parse(last_visited.to_s) : object.created_at
    UpcomingChangeEvent.added.not_backfilled.where("created_at > ?", cutoff).exists?
  end
end

Отзыв прав администратора

Действия применяются к исходному заблокированному аккаунту администратора:

  1. Отзыв прав администратора + выдача прав модератора = ошибка входа / та же самая ошибка.

  2. Отзыв прав модератора

  • первый вход (без ошибки), но зависает на этапе двухфакторной аутентификации / загрузки (крутящееся колесо)
  • оставил на ~10 минут (на сервере наблюдался рост нагрузки при входе), но всё равно ничего не изменилось
  • однако во вкладке «Активные» пользователи показывает, что пользователь вошёл Xm назад, хм :thinking:
  • попытка второго входа в другом (инкогнито) окне — успешно!

Хорошо, так что это выглядит как обходной путь для администратора, которому, возможно, нужно читать сообщения/чаты и т. д., но по сути проблему это не решает.

Далее, используя другой аккаунт администратора, выдаю Grant Admin (права администратора) вошедшему в систему бывшему аккаунту администратора

  • Пока пользователь вошёл в систему, приходит сообщение об обновлении, указывающее на успех.
  • Обновляю страницу, и снова появляется ошибка.

Я не могу написать в теме «Git hang», так как она была закрыта 28 сентября, но, заметив несколько минут назад, что всё стало работать медленнее, я подумал: «О, наверное, git снова сломался и вызывает проблемы», и что же, в этот момент downdetector.com как раз показывал большой всплеск сбоев на GitHub. :thinking: