Уведомления приходят снова, даже после прочтения [Плагин Private Topics]

Здравствуйте, я использую версию 3.2.0.beta4-dev (самостоятельный хостинг) на этом коммите. После обновлений пользователи начали сталкиваться с двойными/тройными уведомлениями в интерфейсе. (Я имею в виду интерфейс Discourse, а не электронную почту и т.д.)

Даже после клика и прочтения уведомления иногда появляются снова. У меня тоже возникают эти проблемы. Я не знаю, как устранить эту неполадку или предоставить полезные логи. Хотел поделиться этим, возможно, это глобальная проблема или только на моем экземпляре?

Я подозреваю, что это проблема с оперативной памятью. Сколько ОЗУ выделено вашему экземпляру Discourse?

Я предполагаю, что вы имеете в виду «интерфейс Discourse»?

Хорошо, но этот сервер работает уже почти два месяца, и до этого проблемы не возникало. Сейчас на моём сервере доступно 4 ГБ оперативной памяти, из которых половина свободна. Также свободно 2 ГБ swap-памяти.

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

Да, я приложил скриншот в своём первом сообщении. Я имею в виду уведомления интерфейса Discourse UI.

Я отключил множество расширений, но проблема всё ещё сохраняется. Есть какие-то идеи или можно ли откатиться до версии 3.2.0.beta3-dev? Спасибо.

Снова здравствуйте. Я понимаю, что никто не обязан помогать, это форум сообщества, и, конечно, я не платный клиент, но эта ошибка становится действительно раздражающей как для меня, так и для пользователей. Мы создали сообщество два месяца назад благодаря Discourse, и у нас сейчас 458 активных пользователей в месяц. Но с момента возникновения этой проблемы у нас (20 дней назад) я перепробовал всё, что мог. Это серьёзно ухудшает пользовательский опыт, и теперь я ищу скрипты для миграции на Flarum или другую платформу форумов. Просто посмотрите на это:

output

Пользователи получают одно и то же уведомление снова и снова и снова. Они видят уведомления от 20 дней назад, от 5 дней назад или вообще от любого времени. Даже если вы отклоните все уведомления, через несколько часов появится то же самое уведомление, и исправить это невозможно!

Ещё раз: я понимаю, где нахожусь — это платформа сообщества. У меня нет права жаловаться, но если после этого сообщения никто не поможет, даже если это означает удаление всех наших предыдущих постов и тем (1,2 тысячи тем и 12,7 тысячи постов), нам придётся уйти в другое место…

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

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

Просто из любопытства, можно ли найти что-то общее между постами, у которых повторяются уведомления?

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

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

Затем я подумал, что дело в beta4. Тогда я откатился до beta3, где у нас не было этой проблемы, но она всё равно сохранялась.

К сожалению, у нас пока нет других сообщений об этой проблеме, поэтому сложно точно определить, что происходит на вашем сайте. У вас стандартная установка?

Есть ли что-нибудь в вашем /logs или на странице /sidekiq, что могло бы предоставить дополнительную информацию?

Да. Отключение может не полностью устранить проблемный компонент. Но какие плагины вы недавно установили? Возможно, мы сможем определить, был ли у кого-то из них сообщен о проблемах.

Да, я понимаю, что трудно точно определить причину. Именно поэтому я надеялся, что проблема исчезнет со временем, но этого не произошло.

Я думаю, что у меня та же проблема, что и здесь: Users getting notifictations from long ago

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

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

Предупреждения:


MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Не удалось отправить push-уведомление: WebPush::Unauthorized : host: fcm.googleapis.com, #<Net::HTTPForbidden 403 Forbidden readbody=true> body: учетные данные VAPID в заголовке авторизации не совпадают
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Не удалось обработать исключение в промежуточном ПО приложения для исключений: ArgumentError : передан пустой список атрибутов
Не удалось обработать исключение в промежуточном ПО приложения для исключений: ArgumentError : передан пустой список атрибутов
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Тема/компонент DiscoTOC вызывает ошибки: TypeError: Cannot read properties of null (reading 'en')
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Не удалось обработать исключение в промежуточном ПО приложения для исключений: ArgumentError : передан пустой список атрибутов
Не удалось отправить push-уведомление: WebPush::Unauthorized : host: updates.push.services.mozilla.com, #<Net::HTTPUnauthorized 401 Unauthorized readbody=true> body: {"code":401,"errno":109,"error":"Unaut
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Не удалось обработать исключение в промежуточном ПО приложения для исключений: ActiveRecord::RecordNotUnique : PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_topic_tags_on_topic_id_and_t
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Не удалось корректно обработать перехваченный ответ: EOFError : достигнут конец файла
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
Уведомление об устаревании: `SiteSetting.anonymous_posting_min_trust_level` устарело. Пожалуйста, используйте `SiteSetting.anonymous_posting_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/disc
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Не удалось отправить push-уведомление: WebPush::ResponseError : host: web.push.apple.com, #<Net::HTTPBadRequest 400 Bad Request readbody=true> body: {"reason":"VapidPkHashMismatch"}
Тема/компонент discourse-gifs вызывает ошибки: TypeError: Cannot read properties of null (reading 'en')
Тема/компонент DiscoTOC вызывает ошибки: TypeError: Cannot read properties of null (reading 'en')
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Не удалось отправить push-уведомление: WebPush::Unauthorized : host: updates.push.services.mozilla.com, #<Net::HTTPUnauthorized 401 Unauthorized readbody=true> body: {"code":401,"errno":109,"error":"Unaut
Sidekiq потребляет слишком много памяти (использует: 558.27M) для 'btt.community', перезапуск
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Не удалось отправить push-уведомление: WebPush::PushServiceError : host: updates.push.services.mozilla.com, #<Net::HTTPBadGateway 502 Bad Gateway readbody=true> body: {"code":502,"errno":903,"error":"Bad
Уведомление об устаревании: `SiteSetting.min_trust_level_for_here_mention` устарело. Пожалуйста, используйте `SiteSetting.here_mention_allowed_groups` вместо этого. (удаление в Discourse 3.3) В /var/www/discourse/
Уведомление об устаревании: Jobs::Chat::NotifyMentioned был поставлен в очередь с аргументами, которые не корректно сериализуются в/из JSON. Это означает, что задача будет выполнена со слегка отличающимися значениями, чем t
Уведомление об устаревании: Jobs::Chat::NotifyWatching был поставлен в очередь с аргументами, которые не корректно сериализуются в/из JSON. Это означает, что задача будет выполнена со слегка отличающимися значениями, чем th
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Уведомление об устаревании: Jobs::Chat::NotifyMentioned был поставлен в очередь с аргументами, которые не корректно сериализуются в/из JSON. Это означает, что задача будет выполнена со слегка отличающимися значениями, чем t
Уведомление об устаревании: Jobs::Chat::NotifyWatching был поставлен в очередь с аргументами, которые не корректно сериализуются в/из JSON. Это означает, что задача будет выполнена со слегка отличающимися значениями, чем th

Ошибки:

Исключение задачи: Net::ReadTimeout
Исключение задачи: Net::ReadTimeout
Исключение задачи: Net::SMTPAuthenticationError
Исключение задачи: Net::SMTPAuthenticationError
Исключение задачи: Net::SMTPAuthenticationError
(google_oauth2) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
Исключение задачи: Net::ReadTimeout
(github) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
(discord) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
default: Не удалось загрузить горячую ссылку на изображение (https://btt.community/uploads/default/optimized/2X/9/9394498c413ffd7cefbee2461a83d1a66b3b499c_2_690x388.jpeg) post: 10185 PG::UniqueViolation: ERROR: duplicat
Исключение задачи: ERROR: duplicate key value violates unique constraint "pg_type_typname_nsp_index" DETAIL: Key (typname, typnamespace)=(gamification_leaderboard_cache_1_all_time_1, 2200) already exist
(google_oauth2) Ошибка аутентификации! invalid_credentials: OAuth2::Error, invalid_grant: Bad Request { "error": "invalid_grant", "error_description": "Bad Request" }
Исключение задачи: Net::ReadTimeout
Исключение задачи: достигнут конец файла
(github) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
(twitter) Ошибка аутентификации! invalid_credentials: OAuth::Unauthorized, 401 Unauthorized
Исключение задачи: Net::SMTPAuthenticationError
Исключение задачи: достигнут конец файла
(google_oauth2) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
(google_oauth2) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
Исключение задачи: Net::ReadTimeout
Исключение задачи: неверное количество аргументов (передано 0, ожидалось 1)
Исключение задачи: достигнут конец файла
Исключение задачи: неверное количество аргументов (передано 0, ожидалось 1)
(discord) Ошибка аутентификации! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Обнаружен CSRF
Исключение задачи: Net::ReadTimeout
Исключение задачи: неверное количество аргументов (передано 0, ожидалось 1)

Критические ошибки:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "categories" does not exist LINE 1: SELECT "categories"."id" FROM "categories" LEFT JOIN categor...
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...
Regexp::TimeoutError (тайм-аут регулярного выражения) lib/crawler_detection.rb:38:in `match?' lib/crawler_detection.rb:38:in `crawler?' lib/middleware/anonymous_cache.rb:129:in `is_crawler?' (eval):2:in `__comp
ActiveRecord::StatementInvalid (PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block ) lib/post_action_creator.rb:295:in `rescue in creat
NoMethodError (не определен метод `title' для nil:NilClass) app/models/reviewable_queued_post.rb:166:in `perform_revise_and_reject_post' app/models/reviewable.rb:331:in `public_send' app/models/reviewab
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
NoMethodError (не определен метод `title' для nil:NilClass) app/models/reviewable_queued_post.rb:166:in `perform_revise_and_reject_post' app/models/reviewable.rb:331:in `public_send' app/models/reviewab
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:522:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
NoMethodError (не определен метод `title' для nil:NilClass) app/models/reviewable_queued_post.rb:166:in `perform_revise_and_reject_post' app/models/reviewable.rb:331:in `public_send' app/models/reviewab
NoMethodError (не определен метод `title' для nil:NilClass) app/models/reviewable_queued_post.rb:166:in `perform_revise_and_reject_post' app/models/reviewable.rb:331:in `public_send' app/models/reviewab
ArgumentError (передан пустой список атрибутов) lib/plugin/instance.rb:521:in `block in on' lib/discourse_event.rb:12:in `block in trigger' lib/discourse_event.rb:12:in `trigger' app/models/post_mover
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_topic_tags_on_topic_id_and_tag_id" DETAIL: Key (topic_id, tag_id)=(2907, 1) already e

Что касается Sidekiq, я не знаю, куда именно смотреть. Разве Sidekiq не обрабатывает электронную почту? Имеет ли он какое-то отношение к уведомлениям?

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

Вот расширения, которые я установил до начала этой проблемы (она началась именно в тот день):

  • Who’s Online
  • Cakeday
  • Signature
  • Adsense
  • ActivityPub (я полностью удалил его и пересобрал, так как не мог отключить)

Как компонент темы:

  • GIF

РЕДАКТИРОВАНИЕ: Я забыл добавить еще несколько

  • Discourse Private Topics
  • Discourse Force Moderation

Возможно, я ошибаюсь, но это же компонент темы, верно?

Да, верно, на данный момент это компонент темы. Я пока не до конца разбираюсь, что к чему, но всё равно добавил его. :grinning_face_with_smiling_eyes:

Sidekiq обрабатывает все фоновые задачи, включая уведомления. У вас там довольно эклектичный набор ошибок :slight_smile: Мне кажется, я узнаю несколько из тех, которые уже исправлены, поэтому после выполнения пересборки/обновления они не должны повториться. Однако я вижу:

Sidekiq потребляет слишком много памяти (использует: 558.27M)

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

А, понятно, если это действительно так, то, возможно, в этом и проблема.

image

Слева — это счётчик, верно? Значит, это произошло 10 раз.

Вот все моменты, когда это случалось:

8 сен, 18:55
25 сен, 21:44
4 окт, 21:53
10 ноя, 02:26 (Проблема началась 9 ноября)
11 ноя, 11:37
11 ноя, 13:37
23 ноя, 18:43
25 ноя, 18:59
Вс, 07:32
Пн, 13:12

Но дело в том, что у нас 4 ГБ оперативной памяти и 2 ГБ SWAP, и я никогда не вижу, чтобы они использовались больше:

Это скриншот, сделанный только что. Возможно, это происходит, когда у пользователей пиковая нагрузка, или, если это не так, мне, возможно, нужно увеличить порог для Sidekiq?

ИНФО:

Sidekiq потребляет слишком много памяти (использует: 558.27M) для 'btt.community', перезапуск

BACKTRACE:

config/unicorn.conf.rb:164:in `check_sidekiq_heartbeat'
config/unicorn.conf.rb:244:in `master_sleep'
unicorn-6.1.0/lib/unicorn/http_server.rb:295:in `join'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'

env:

hostname	dc-app, [dc-discourse]
process_id	1215943
application_version	a55f924e279b45b81e69e720faeb38284aed90d4
time	Пн, 13:12

Я знаю, это ничего не доказывает, но у меня эта ошибка возникает несколько раз в день[1], и ничего подобного тому, с чем сталкивается ОП, у меня не происходит.


  1. потому что исправление кажется слишком затратным и сложным ↩︎

При более внимательном рассмотрении я также вижу несколько ошибок, которые могут быть связаны с этим:

1-я:

Сообщение (109 копий)

Предупреждение об устаревании: Jobs::Chat::NotifyMentioned был поставлен в очередь с аргументами, которые не могут быть корректно сериализованы/десериализованы в JSON. Это означает, что задача будет выполнена с немного другими значениями, чем те, что были переданы в `enqueue`. Значения аргументов должны быть строками, булевыми значениями, числами или nil (или массивами/хешами этих типов значений). (устарело с версии Discourse 2.9) (удаление в версии Discourse 3.0) 
В /var/www/discourse/plugins/chat/lib/chat/notifier.rb:355:in `notify_mentioned_users`

Стек вызовов

/var/www/discourse/lib/discourse.rb:1030:in `deprecate'
/var/www/discourse/app/jobs/base.rb:371:in `enqueue'
/var/www/discourse/plugins/chat/lib/chat/notifier.rb:355:in `notify_mentioned_users'
/var/www/discourse/plugins/chat/lib/chat/notifier.rb:78:in `notify_new'
/var/www/discourse/plugins/chat/app/jobs/regular/chat/process_message.rb:42:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/chat/app/jobs/regular/chat/process_message.rb:7:in `execute'

2-я:

Сообщение (109 копий)

Предупреждение об устаревании: Jobs::Chat::NotifyWatching был поставлен в очередь с аргументами, которые не могут быть корректно сериализованы/десериализованы в JSON. Это означает, что задача будет выполнена с немного другими значениями, чем те, что были переданы в `enqueue`. Значения аргументов должны быть строками, булевыми значениями, числами или nil (или массивами/хешами этих типов значений). (устарело с версии Discourse 2.9) (удаление в версии Discourse 3.0) 
В /var/www/discourse/plugins/chat/lib/chat/notifier.rb:367:in `notify_watching_users`

Стек вызовов

/var/www/discourse/lib/discourse.rb:1030:in `deprecate'
/var/www/discourse/app/jobs/base.rb:371:in `enqueue'
/var/www/discourse/plugins/chat/lib/chat/notifier.rb:367:in `notify_watching_users'
/var/www/discourse/plugins/chat/lib/chat/notifier.rb:79:in `notify_new'
/var/www/discourse/plugins/chat/app/jobs/regular/chat/process_message.rb:42:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/chat/app/jobs/regular/chat/process_message.rb:7:in `execute'

3-я:

Сообщение (29888 копий)

Исключение в задаче: неверное количество аргументов (получено 0, ожидалось 1)


Стек вызовов

/var/www/discourse/plugins/discourse-private-topics/plugin.rb:20:in `get_filtered_category_ids'
/var/www/discourse/plugins/discourse-private-topics/plugin.rb:149:in `handle'
/var/www/discourse/plugins/discourse-follow/plugin.rb:131:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:521:in `block in on'
/var/www/discourse/lib/discourse_event.rb:12:in `block in trigger'
/usr/local/lib/ruby/3.2.0/set.rb:511:in `each_key'
/usr/local/lib/ruby/3.2.0/set.rb:511:in `each'
/var/www/discourse/lib/discourse_event.rb:12:in `trigger'
/var/www/discourse/app/services/post_alerter.rb:205:in `after_save_post'
/var/www/discourse/app/jobs/regular/post_alert.rb:10:in `execute'

имя_хоста	dc-app
идентификатор_процесса	190
версия_приложения	95b7cbd8a13ec82003936ef9408ec83bc9f3c2ea
текущая_база_данных	default
текущий_хост	btt.community
задача	Jobs::PostAlert
проблемная_база_данных	default
время	Ср 13:55

Судя по стеку вызовов третьей ошибки, проблема связана с плагинами discourse-private-topics и discourse-follow. Как я уже говорил, я не эксперт в этой области, но давайте я удалю и заново соберу всё с нуля…

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

И проблема не решена.

В Sidekiq я вижу десятки задач Jobs::PostAlert в секции повторных попыток. Думаю, именно поэтому все эти уведомления возвращаются. Но почему они попадают в повторные попытки, если уведомление действительно отправляется?

Как видите, это занимает 63 страницы. Мне нужно удалить их все?

РЕДАКТИРОВАНИЕ:

Судя по ошибке, она вызывается плагинами discourse-private-topics и discourse-follow.

Даже после их удаления, так как они находились в секции повторных попыток, Sidekiq продолжал отправлять эти уведомления. Теперь я удалил все эти повторные попытки и надеюсь, что проблема решена. Я обновлю информацию.

Отлично, проблема решена. В итоге ошибка Job exception: wrong number of arguments (given 0, expected 1) вызвана либо плагином Private Topics Plugin, либо плагином Discourse Follow, либо обоими сразу. Возможно, их сочетание и создаёт эту проблему — я не знаю и, честно говоря, не хочу выяснять. Я немного травмирован, разгребая эту проблему уже 21 день. :grinning_face_with_smiling_eyes: Возможно, авторам этих плагинов стоит об этом узнать, поэтому я отмечу их здесь: @sam @RGJ.

Спасибо @JammyDodger @Firepup650.

Кажется, я научился отлаживать проблемы в Discourse и больше никогда не буду устанавливать более одного плагина за раз…

Спасибо, что докопались до сути! Действительно, проблема была в моём плагине для личных тем, которая проявлялась только при включённом плагине подписки.

Я исправил ошибку. Извините за этот травмирующий опыт :wink:

Отличная отладка. :clap: :slight_smile: И спасибо за быстрое исправление @RGJ :rocket:

Поскольку это была проблема с неофициальным плагином (не official), я перемещу её из категории bug (хотя и не буду объединять с Private Topics Plugin, так как это слишком объёмно для этой темы).

Надеюсь, теперь вы сможете установить оба плагина без лишних уведомлений. :crossed_fingers: