Моя версия Discourse: 2026.5.0-latest.1 (fbcbdc46d8)
При загрузке постов темы я вижу повторяющиеся ошибки /logs. Ошибка, похоже, исходит из встроенного плагина discourse-reactions при сериализации потока постов.
Сайт сообщает, что это сообщение было зарегистрировано 8 раз.
Я проверил диапазон сравнения ниже, но он, похоже, не затрагивает проблемный путь выполнения в бэкенде, поэтому я сообщаю об этом отдельно:
Сообщение об ошибке из /logs
Сообщение (8 зарегистрированных копий)
NameError (не инициализированная константа ReactionsSerializerHelpers)
app/serializers/post_stream_serializer_mixin.rb:31:in `PostStreamSerializerMixin#post_stream'
app/controllers/application_controller.rb:531:in `ApplicationController#render_json_dump'
app/controllers/topics_controller.rb:296:in `TopicsController#posts'
app/controllers/application_controller.rb:452:in `block in ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:452:in `ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:1103:in `ApplicationController#ensure_dont_cache_page'
lib/middleware/omniauth_bypass_middleware.rb:35:in `Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:13:in `Middleware::CrawlerHooks#call'
lib/content_security_policy/middleware.rb:12:in `ContentSecurityPolicy::Middleware#call'
lib/middleware/anonymous_cache.rb:420:in `Middleware::AnonymousCache#call'
lib/middleware/csp_script_nonce_injector.rb:12:in `Middleware::CspScriptNonceInjector#call'
lib/middleware/track_view_session_id_injector.rb:12:in `Middleware::TrackViewSessionIdInjector#call'
config/initializers/008-rack-cors.rb:14:in `Discourse::Cors#call'
lib/middleware/default_headers.rb:13:in `Middleware::DefaultHeaders#call'
config/initializers/100-quiet_logger.rb:20:in `DiscourseRackQuietAssetsLogger#call'
config/initializers/100-silence_logger.rb:29:in `SilenceLogger#call'
lib/middleware/enforce_hostname.rb:23:in `Middleware::EnforceHostname#call'
lib/middleware/request_tracker.rb:372:in `Middleware::RequestTracker#call'
lib/middleware/overload_protections.rb:18:in `Middleware::OverloadProtections#call'
lib/middleware/processing_request.rb:14:in `Middleware::ProcessingRequest#call'
Трассировка стека из /logs
Трассировка стека
plugins/discourse-reactions/lib/discourse_reactions/posts_reaction_loader.rb:10:in `DiscourseReactions::PostsReactionLoader#posts_with_reactions'
plugins/discourse-reactions/lib/discourse_reactions/topic_view_posts_serializer_extension.rb:7:in `DiscourseReactions::TopicViewPostsSerializerExtension#posts'
app/serializers/post_stream_serializer_mixin.rb:31:in `PostStreamSerializerMixin#post_stream'
(eval at active_model_serializers-0.8.4/lib/active_model/serializer.rb:467):3:in `TopicViewPostsSerializer#_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `ActiveModel::Serializer#attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `ActiveModel::Serializer#_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `ActiveModel::Serializer#serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `ActiveModel::Serializer#as_json'
activesupport (8.0.5) lib/active_support/json/encoding.rb:41:in `Oj::Rails::Encoder#encode'
activesupport (8.0.5) lib/active_support/json/encoding.rb:41:in `ActiveSupport::JSON.encode'
activesupport (8.0.5) lib/active_support/core_ext/object/json.rb:42:in `ActiveSupport::ToJsonWithActiveSupportEncoder#to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `ActiveModel::Serializer#to_json'
multi_json (1.20.1) lib/multi_json/adapters/oj.rb:67:in `Oj.dump'
multi_json (1.20.1) lib/multi_json/adapters/oj.rb:67:in `MultiJson::Adapters::Oj#dump'
multi_json (1.20.1) lib/multi_json/adapter.rb:92:in `MultiJson::Adapter.dump'
multi_json (1.20.1) lib/multi_json.rb:214:in `MultiJson.dump'
app/controllers/application_controller.rb:531:in `ApplicationController#render_json_dump'
app/controllers/topics_controller.rb:296:in `TopicsController#posts'
actionpack (8.0.5) lib/action_controller/metal/basic_implicit_render.rb:8:in `ActionController::BasicImplicitRender#send_action'
actionpack (8.0.5) lib/abstract_controller/base.rb:215:in `AbstractController::Base#process_action'
actionpack (8.0.5) lib/action_controller/metal/rendering.rb:193:in `ActionController::Rendering#process_action'
actionpack (8.0.5) lib/abstract_controller/callbacks.rb:261:in `block in AbstractController::Callbacks#process_action'
activesupport (8.0.5) lib/active_support/callbacks.rb:120:in `block in ActiveSupport::Callbacks#run_callbacks'
app/controllers/application_controller.rb:452:in `block in ApplicationController#with_resolved_locale'
i18n (1.14.8) lib/i18n.rb:354:in `I18n::Base#with_locale'
app/controllers/application_controller.rb:452:in `ApplicationController#with_resolved_locale'
activesupport (8.0.5) lib/active_support/callbacks.rb:129:in `block in ActiveSupport::Callbacks#run_callbacks'
app/controllers/application_controller.rb:1103:in `ApplicationController#ensure_dont_cache_page'
activesupport (8.0.5) lib/active_support/callbacks.rb:129:in `block in ActiveSupport::Callbacks#run_callbacks'
activesupport (8.0.5) lib/active_support/callbacks.rb:140:in `ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.5) lib/abstract_controller/callbacks.rb:260:in `AbstractController::Callbacks#process_action'
actionpack (8.0.5) lib/action_controller/metal/rescue.rb:27:in `ActionController::Rescue#process_action'
actionpack (8.0.5) lib/action_controller/metal/instrumentation.rb:76:in `block in ActionController::Instrumentation#process_action'
activesupport (8.0.5) lib/active_support/notifications.rb:210:in `block in ActiveSupport::Notifications.instrument'
activesupport (8.0.5) lib/active_support/notifications/instrumenter.rb:58:in `ActiveSupport::Notifications::Instrumenter#instrument'
activesupport (8.0.5) lib/active_support/notifications.rb:210:in `ActiveSupport::Notifications.instrument'
actionpack (8.0.5) lib/action_controller/metal/instrumentation.rb:75:in `ActionController::Instrumentation#process_action'
actionpack (8.0.5) lib/action_controller/metal/params_wrapper.rb:259:in `ActionController::ParamsWrapper#process_action'
activerecord (8.0.5) lib/active_record/railties/controller_runtime.rb:39:in `ActiveRecord::Railties::ControllerRuntime#process_action'
actionpack (8.0.5) lib/abstract_controller/base.rb:152:in `AbstractController::Base#process'
actionview (8.0.5) lib/action_view/rendering.rb:40:in `ActionView::Rendering#process'
rack-mini-profiler (4.0.1) lib/mini_profiler/profiling_methods.rb:90:in `block in ActionController::Base#profile_method'
actionpack (8.0.5) lib/action_controller/metal.rb:252:in `ActionController::Metal#dispatch'
actionpack (8.0.5) lib/action_controller/metal.rb:335:in `ActionController::Metal.dispatch'
actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:67:in `ActionDispatch::Routing::RouteSet::Dispatcher#dispatch'
actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:50:in `ActionDispatch::Routing::RouteSet::Dispatcher#serve'
actionpack (8.0.5) lib/action_dispatch/journey/router.rb:53:in `block in ActionDispatch::Journey::Router#serve'
actionpack (8.0.5) lib/action_dispatch/journey/router.rb:133:in `block in ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.5) lib/action_dispatch/journey/router.rb:126:in `Array#each'
actionpack (8.0.5) lib/action_dispatch/journey/router.rb:126:in `ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.5) lib/action_dispatch/journey/router.rb:34:in `ActionDispatch::Journey::Router#serve'
actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:908:in `ActionDispatch::Routing::RouteSet#call'
lib/middleware/omniauth_bypass_middleware.rb:35:in `Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:13:in `Middleware::CrawlerHooks#call'
rack (2.2.23) lib/rack/tempfile_reaper.rb:15:in `Rack::TempfileReaper#call'
rack (2.2.23) lib/rack/conditional_get.rb:27:in `Rack::ConditionalGet#call'
rack (2.2.23) lib/rack/head.rb:12:in `Rack::Head#call'
actionpack (8.0.5) lib/action_dispatch/http/permissions_policy.rb:38:in `ActionDispatch::PermissionsPolicy::Middleware#call'
lib/content_security_policy/middleware.rb:12:in `ContentSecurityPolicy::Middleware#call'
lib/middleware/anonymous_cache.rb:420:in `Middleware::AnonymousCache#call'
lib/middleware/csp_script_nonce_injector.rb:12:in `Middleware::CspScriptNonceInjector#call'
lib/middleware/track_view_session_id_injector.rb:12:in `Middleware::TrackViewSessionIdInjector#call'
config/initializers/008-rack-cors.rb:14:in `Discourse::Cors#call'
rack (2.2.23) lib/rack/session/abstract/id.rb:266:in `Rack::Session::Abstract::Persisted#context'
rack (2.2.23) lib/rack/session/abstract/id.rb:260:in `Rack::Session::Abstract::Persisted#call'
actionpack (8.0.5) lib/action_dispatch/middleware/cookies.rb:706:in `ActionDispatch::Cookies#call'
actionpack (8.0.5) lib/action_dispatch/middleware/callbacks.rb:31:in `block in ActionDispatch::Callbacks#call'
activesupport (8.0.5) lib/active_support/callbacks.rb:100:in `ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.5) lib/action_dispatch/middleware/callbacks.rb:30:in `ActionDispatch::Callbacks#call'
actionpack (8.0.5) lib/action_dispatch/middleware/debug_exceptions.rb:31:in `ActionDispatch::DebugExceptions#call'
actionpack (8.0.5) lib/action_dispatch/middleware/show_exceptions.rb:32:in `ActionDispatch::ShowExceptions#call'
logster (2.21.0) lib/logster/middleware/reporter.rb:40:in `Logster::Middleware::Reporter#call'
lib/middleware/default_headers.rb:13:in `Middleware::DefaultHeaders#call'
railties (8.0.5) lib/rails/rack/logger.rb:41:in `Rails::Rack::Logger#call_app'
railties (8.0.5) lib/rails/rack/logger.rb:29:in `Rails::Rack::Logger#call'
config/initializers/100-quiet_logger.rb:20:in `DiscourseRackQuietAssetsLogger#call'
config/initializers/100-silence_logger.rb:29:in `SilenceLogger#call'
actionpack (8.0.5) lib/action_dispatch/middleware/request_id.rb:34:in `ActionDispatch::RequestId#call'
lib/middleware/enforce_hostname.rb:23:in `Middleware::EnforceHostname#call'
rack (2.2.23) lib/rack/method_overrid
Что, по-видимому, происходит
Ошибка возникает, когда TopicsController#posts рендерит JSON для потока постов.
Трассировка стека указывает на:
plugins/discourse-reactions/lib/discourse_reactions/posts_reaction_loader.rb
а затем на:
plugins/discourse-reactions/lib/discourse_reactions/topic_view_posts_serializer_extension.rb
Проблемная константа, по-видимому, следующая:
ReactionsSerializerHelpers
Таким образом, это выглядит либо как:
ReactionsSerializerHelpersне загружается/не определяется до того, какPostsReactionLoaderна него ссылается, либо- устаревшее/смешанное состояние плагина или ядра заставляет встроенный плагин reactions ссылаться на вспомогательный метод, который отсутствует в выполняемом коде.
Вопрос
Ожидается ли, что это будет исправлено в более позднем коммите, или это проблема порядка загрузки/встроенного плагина в discourse-reactions?
Я готов предоставить дополнительные детали окружения, если это будет полезно.