説明
API を使用してアクティブなユーザーを取得する際、/admin/users/list/active.json の一部のページで HTTP 500 エラーが発生します。
回避策
問題のあるページをスキップすれば、他のページは問題なく取得できます。
エラー
HTTP 500 を引き起こしたサーバーエラー:
NoMethodError: undefined method '[]' for nil (NoMethodError)
main_user_record[:silenced_till]
^^^^^^^^^^^^^^^^
from app/models/user.rb:1335:in `silenced_till'
from active_record/attribute_methods/query.rb:48:in `public_send'
from active_record/attribute_methods/query.rb:48:in `query_attribute'
from active_model/attribute_methods.rb:273:in `silenced_till?'
from app/serializers/admin_user_list_serializer.rb:51:in `include_silenced_till?'
from active_model/serializer.rb:375:in `include?'
...
システムログによると、これらのエラーは 2025 年 10 月下旬に Discourse v3.5.1 から v3.5.2 へアップグレードした後に発生し始めました。参照されている行は、Silenced user can circumvent it entering anonymous mode - #12 by pangbo で議論された通り、FIX: Delegate silenced_till from anonymous user to main user account · Pull Request #32416 · discourse/discourse で導入されました。
解決策
私は Ruby の専門家ではありませんが、v3.5.2 の変更以降にアクティブになっていないユーザーを含む API JSON ページでこの問題が発生していることから、この変更に伴う特定のケースに対応するデータベースマイグレーションが不足しているのではないかと推測します。