Канал чата не отображает и не сохраняет сообщения

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

В логах указано следующее:

Message

NoMethodError (undefined method `replies_count' for nil:NilClass)
(eval):17:in `_fast_attributes'
app/controllers/application_controller.rb:545:in `render_json_dump'
app/controllers/application_controller.rb:532:in `render_serialized'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/chat/app/serializers/chat/message_serializer.rb:161:in `thread_reply_count'
(eval):17:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'

Env

HTTP HOSTS: foorumi.katiska.eu

Есть какие-то идеи?

Редактирование:

Если это имеет значение, то эти каналы, которые работают некорректно, ранее были подкатегориями, но я изменил их на основные категории.

Однако мои пользователи утверждают, что проблемы возникли ещё до этого изменения.

Привет,

вы когда-нибудь пробовали использовать экспериментальные (и скрытые) настройки потоков?

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

У вас есть какие-то идеи?

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

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

Если я изменил только то, что нашёл здесь, и поиск ничего подходящего не показал.

Может ли Rails показать, что больше не является настройкой по умолчанию?

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

4 лайка

Отлично!

Тем не менее, я всё ещё хочу понять, что же я, чёрт возьми, сломал… Я почти уверен, что ранее менял только (на тот момент) новые настройки улучшений поиска и подобные им.

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

(И я постоянно ною по поводу ленивой документации :man_facepalming: )

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

2 лайка

Сначала: ваше исправление не помогло. Извините. Или помогло — эта ошибка была немного странной.

Пожалуйста, следуйте за мной :wink:

У меня есть 5 каналов:

  • три для TL1
  • один для персонала
  • один для пользовательской группы из 5 человек

Я переместил все каналы, кроме канала для персонала, из подкатегорий на верхний уровень.

Затем я попробовал, как работает компонент предварительного просмотра категории, но это было не то, что мне нужно, поэтому я отключил его. Сразу после этого я выполнил перестроение, чтобы получить плагин Category Lockdown.

Это сработало, за исключением того, что у меня возникли странные проблемы с темой FKB Pro и модальными окнами входа/регистрации — они показывали только вращающийся индикатор загрузки. Насколько я знаю, это происходило только на моем iPad.

В тот момент я понял, что чат-канал пользовательской группы перестал работать. Кроме того, группа персонала и 2 из 3 групп TL1 показывали только самые последние сообщения. Одна группа TL1 оставалась без изменений.

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

Если коротко и после нескольких перестроений с удалением и повторным включением плагинов:

  • канал персонала и два канала TL1 имеют низкую нагрузку, и я совершенно забыл, что там действует правило 14 дней; поэтому там не возникло никаких проблем
  • канал пользовательской группы был сломан, если были установлены оба плагина Data Explorer и Category Lockdown, и включение/выключение не имело значения
  • перестроение без этих двух плагинов исправило тот один сломанный канал. Когда я снова выполнил перестроение (это вообще слово?) с обоими плагинами, этот канал всё ещё работал нормально

Мое необразованное предположение: что-то пошло не так, когда я впервые попробовал предварительный просмотр категорий, затем я отключил его, затем выполнил перестроение с Category Lockdown, и последним шагом было удаление предварительного просмотра категорий. Исправление каких-то причудливых ошибок SQL или ложных срабатываний потребовало полного удаления Data Explorer и Lockdown, а затем повторной установки.

То, что я не могу понять, — это журнал ошибок Discourse — как он вписывается во всё это.

В любом случае. У меня все плагины снова онлайн, и каналы работают отлично.

Привет, @Jagster! Я тоже работаю в команде чата и сейчас подробнее разбираюсь в этой ситуации. Изучив то, что вы сделали, я вижу, что ни одно из ваших действий не должно было привести к этой ошибке. Каждое сообщение в чате потенциально связано с потоком чата в базе данных через поле thread_id, и одно из ваших сообщений содержит thread_id для потока, который по какой-то причине не существует. У нас нет кода для удаления потоков, поэтому, возможно, какое-то обновление прошло некорректно.

Не могли бы вы выполнить этот запрос и опубликовать результаты? Это поможет нам понять, есть ли у вас массовая проблема или это просто редкий случай:

SELECT id, chat_channel_id, thread_id
FROM chat_messages
WHERE thread_id IS NOT NULL AND thread_id NOT IN (
  SELECT id FROM chat_threads
);

Я использовал Data Explorer и получил вот это (думаю, вы сможете прочитать JSON :wink: )

{"success":true,"errors":[],"duration":0.5,"result_count":2,"params":{},"columns":["id","chat_channel_id","thread_id"],"default_limit":1000,"rows":[[10721,14,152],[10744,14,152]]}

Проблемный канал имел id 14.

1 лайк

Спасибо. Похоже, в данном случае мы примем подход «подождать и посмотреть», поскольку:

  1. Неочевидно, что стало причиной;
  2. На нескольких проверенных мной сайтах ошибку воспроизвести не удалось;
  3. Проблема возникла только в одном месте на вашем сайте.

Ещё одна проверка — просто выполнить следующий запрос:

SELECT * FROM chat_threads WHERE id = 152;

и убедиться, что он ничего не возвращает.

Подтверждено: ноль, ничего

Конечно. Исправить действительно сложно, когда ничего не удаётся найти.

Спасибо, ребята!

1 лайк