`card.json?include_post_count_for`で匿名訪問者のユーザーカードが「500 Internal Server Error」で即座に消える

こんにちは。これがどのくらいの期間発生しているのかはわかりませんが、セルフホストの 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 さんにメンションします。

Message (184 copies reported)

NoMethodError (undefined method `in_any_groups?' for 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/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'

Backtrace

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'
「いいね!」 2

サードパーティ製プラグインのため、Support に転送しました。:+1:

「いいね!」 2

アップグレード後もこの問題は継続していますか?

長年変更されていなかったプラグインの元のバージョンでは、この問題に気づきませんでした。その後、アップデートでユーザー間のPMが壊れたため、プラグインを無効にしました。そして、あなたの最新の修正で再度有効にしたところ、この問題に気づきました。

問題はまだ続いていますか?

ユーザーカードが匿名ユーザーに表示されなくなる問題は、GitHub - pfaffman/discourse-allow-pm-to-staff: Allow private messages to be sent to staff for users who could otherwise not send private messages. が有効になっている場合に発生し、プラグインが無効になると解決します。

「いいね!」 1

このバグは修正されたと思います。まだアップグレードしていない場合は、アップグレードしてください。

修正済み、ありがとうございます!

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.