Карточки пользователей для анонимных посетителей сразу исчезают с ошибкой "500 Internal Server Error" в `card.json?include_post_count_for`

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

Когда анонимный посетитель нажимает на аватар любого пользователя, контур карточки пользователя на мгновение появляется и сразу же исчезает. В консоли ошибок F12 отображается:

GET   https://example.com/u/UserName/card.json?include_post_count_for=xxxxx

Status  500 Internal Server Error
Version  HTTP/2
Transferred  294 B (46 B size)
Referrer Policy  strict-origin-when-cross-origin
Request Priority  Highest

Это также происходит в безопасном режиме.

У меня не включена настройка hide user profiles from public, но несколько дней назад я тестировал её включение; не уверен, связано ли это с проблемой.

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

Нет, у меня так и не получилось заставить это работать. В любом случае в безопасном режиме это было бы отключено.

Число в ?include_post_count_for=xxxxx — это ID темы, а не пользователя.

Я предположил, что функция, которая не работает, отвечает за кнопку «X сообщений в этой теме», которая отображается в карточке пользователя.

Безопасный режим отключает только код на стороне клиента, оставляя некоторые серверные компоненты активными, поэтому проблема может быть связана с плагином, даже если она возникает в безопасном режиме. В этой теме есть недавний пост с дополнительной информацией: Safe-mode failed with a plugin - #4 by david

Мне не удалось воспроизвести эту проблему на моём тестовом сайте. У вас есть какие-либо плагины, дополнительные настройки или что-то необычное, что могло повлиять на ситуацию? Есть ли в /logs какая-либо дополнительная информация об ошибке?

Хм, спасибо, вы правы, проблема была в этом плагине:

@pfaffman, обратите внимание.

Сообщение (184 копии)

NoMethodError (не определен метод `in_any_groups?' для nil:NilClass)
lib/plugin/instance.rb:301:in `public_send'
lib/plugin/instance.rb:301:in `block (2 levels) in add_to_class'
app/serializers/user_card_serializer.rb:144:in `can_send_private_message_to_user'
(eval):18:in `_fast_attributes'
app/controllers/application_controller.rb:545:in `render_json_dump'
app/controllers/users_controller.rb:147:in `block (2 levels) in show'
app/controllers/users_controller.rb:140:in `show'
app/controllers/users_controller.rb:152:in `show_card'
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:367: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'

Обратная трассировка

plugins/discourse-allow-pm-to-staff/plugin.rb:52:in `block (2 levels) in activate!'
lib/plugin/instance.rb:301:in `public_send'
lib/plugin/instance.rb:301:in `block (2 levels) in add_to_class'
app/serializers/user_card_serializer.rb:144:in `can_send_private_message_to_user'
(eval):18: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/serializer.rb:343:in `as_json'

Я перенаправил это в Support, так как это сторонний плагин. :+1:

Продолжается ли эта проблема после обновления?

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

Значит, проблема всё ещё сохраняется?

Проблема с исчезновением карточек пользователей для анонимных пользователей возникает при включённом плагине GitHub - pfaffman/discourse-allow-pm-to-staff: Allow private messages to be sent to staff for users who could otherwise not send private messages. · GitHub и решается после его отключения.

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

Подтверждено исправление, спасибо!