2.8.6 안정판 또는 2.9.0.beta7로 업데이트한 후 게시글 수정 이력 문제

이전 리비전이 표시되지 않는 게시글을 몇 건 발견했습니다:

(텍스트가 전혀 없고, 3개의 버전이 있는 게시글에서 NaN이 표시되는 것을 확인했습니다)

콘솔에서는 /posts/X/revisions/latest.json에서 500 오류가 발생하고 있습니다.

/logs에서는 아래 오류를 확인할 수 있습니다. 현재 버전은 2.8.6입니다. 어제 2.8.4에서 업데이트한 이후에야 이 문제를 인지했지만, 게시글 몇 건에서만 발견되었기 때문에 업데이트와 직접적인 관련이 있다고 단정할 수는 없습니다. 컨테이너를 재구축해 보았지만 변화가 없었습니다.

Psych::DisallowedClass (Tried to load unspecified class: Symbol)
app/serializers/post_revision_serializer.rb:233:in `block in all_revisions'
app/serializers/post_revision_serializer.rb:228:in `each'
app/serializers/post_revision_serializer.rb:228:in `all_revisions'
app/serializers/post_revision_serializer.rb:187:in `revisions'
app/serializers/post_revision_serializer.rb:254:in `previous'
app/serializers/post_revision_serializer.rb:50:in `previous_hidden'
(eval):5:in `_fast_attributes'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/posts_controller.rb:425:in `latest_revision'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

백트레이스:

/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:97:in `find'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:28:in `load'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:39:in `block (2 levels) in <class:ClassLoader>'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:32:in `symbolize'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:82:in `symbolize'
/usr/local/lib/ruby/2.7.0/psych/scalar_scanner.rb:74:in `tokenize'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:60:in `deserialize'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:123:in `visit_Psych_Nodes_Scalar'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:339:in `block in revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each_slice'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:162:in `visit_Psych_Nodes_Mapping'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `block in register_empty'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `register_empty'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:141:in `visit_Psych_Nodes_Sequence'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:340:in `block in revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each_slice'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:162:in `visit_Psych_Nodes_Mapping'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:313:in `visit_Psych_Nodes_Document'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych.rb:360:in `safe_load'
activerecord (6.1.6.1) lib/active_record/coders/yaml_column.rb:50:in `yaml_load'
activerecord (6.1.6.1) lib/active_record/coders/yaml_column.rb:26:in `load'
activerecord (6.1.6.1) lib/active_record/type/serialized.rb:22:in `deserialize'
activemodel (6.1.6.1) lib/active_model/type/helpers/mutable.rb:8:in `cast'
activemodel (6.1.6.1) lib/active_model/attribute.rb:175:in `type_cast'
activemodel (6.1.6.1) lib/active_model/attribute.rb:43:in `value'
activemodel (6.1.6.1) lib/active_model/attribute_set.rb:42:in `fetch_value'
activerecord (6.1.6.1) lib/active_record/attribute_methods/read.rb:36:in `_read_attribute'
activemodel (6.1.6.1) lib/active_model/attribute_methods.rb:254:in `modifications'
app/serializers/post_revision_serializer.rb:233:in `block in all_revisions'
app/serializers/post_revision_serializer.rb:228:in `each'
app/serializers/post_revision_serializer.rb:228:in `all_revisions'
app/serializers/post_revision_serializer.rb:187:in `revisions'
app/serializers/post_revision_serializer.rb:254:in `previous'
app/serializers/post_revision_serializer.rb:50:in `previous_hidden'
(eval):5:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456: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:347:in `as_json'
activesupport (6.1.6.1) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.6.1) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.6.1) lib/active_support/core_ext/object/json.rb:43:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/posts_controller.rb:425:in `latest_revision'
actionpack (6.1.6.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.6.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.6.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
i18n (1.8.11) lib/i18n.rb:314:in `with_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.6.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.6.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.6.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.6.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.6.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.6.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.6.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.6.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method'
actionpack (6.1.6.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.6.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.6.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.6.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties
2개의 좋아요

이 사이트가 공개된 사이트인가요? 영향받은 게시물의 링크를 공유해 주실 수 있나요? (편하신 경우 개인 메시지로 보내셔도 됩니다)

3개의 좋아요

개인 메시지로 보냈습니다. 필요하시면 다른 분들에게도 보내 드릴 수 있습니다.

2개의 좋아요

공유해주신 링크를 간단히 살펴봤는데, 편집 이력이 누락된 게시물이 주제 헤더에 날짜가 표시되는 게시물과 일치하는 것 같습니다. 해당 날짜를 추가하는 테마 구성 요소가 있으신가요?

4개의 좋아요

제목이 주제 제목을 의미하는지, 아니면 다른 것을 의미하는지 확실하지 않습니다. 주제 타일들은 외관과 달리 수동으로 추가됩니다. 다만, 문제가 발생하는 두 게시물 모두 사람들이 회의를 조직하는 공통의 상위 카테고리에 있는 것 같습니다.

저희는 paviliondev/discourse-events 플러그인을 사용 중이며, 해당 카테고리의 주제들은 첫 번째 게시물에 관련 이벤트가 연결되어 있습니다(이 문제가 발생하는 곳입니다). 그러나 안전 모드를 사용하여 플러그인을 비활성화해도 수정이 다시 작동하지 않았습니다.

다른 시도해 볼 방법이 있을까요?

3개의 좋아요

이 문제는 https://github.com/discourse/discourse/commit/bb287c6c74aed9c9ccd36f6270c219f806bb84f3와 관련이 있을 것 같습니다. 현재 저희 사이트 몇 곳을 확인해 보고 있는데, 비슷한 오류 로그가 몇 개 발견되었습니다. 수정이 완료되면 여기서 업데이트하겠습니다 :eyes:

6개의 좋아요

다음 커밋으로 수정되어야 합니다: FIX: Allow Time objects to be deserialized in PostRevision (#17501) · discourse/discourse@7d9b98a · GitHub

그리고 stable 브랜치에서는: FIX: Allow Time objects to be deserialized in PostRevision (stable) (… · discourse/discourse@5d2ecce · GitHub

표준 설치 환경을 업데이트하려면 /admin/upgrade 페이지로 이동하세요.

7개의 좋아요

업그레이드 후에도 이 문제가 여전히 발생하고 있습니다.


이전보다는 덜 자주 발생하지만, 가끔씩 여전히 나타납니다.

3개의 좋아요

빠른 작업에 감사드립니다. 하지만 저희 환경에서는 문제가 해결되지 않은 것 같습니다. 제가 언급한 두 게시물은 여전히 이전과 동일한 방식으로 동작하며, 표시되는 버전이 없습니다. /admin/upgrade 실행과 재구성을 모두 시도해 보았습니다.

2개의 좋아요

죄송합니다! 이 수정은 저희 호스팅에서 비슷한 오류를 해결하는 데 도움이 되었기 때문에, 귀하의 사이트에서는 플러그인 또는 가져오기(import)와 관련된 다른 요인이 작용하고 있을 가능성이 높습니다.

/logs 페이지를 방문하여 다음과 같은 오류가 있는지 확인해 주시겠어요?

Psych::DisallowedClass (Tried to load unspecified class: Time)

저희가 확인한 것은 “Time” 버전의 오류뿐이었으며, 이제 해결되었어야 합니다. 로그에서 다른 ‘unspecified class’ 오류를 확인하시나요?

1개의 좋아요

아, 그렇다면 같은 문제가 아닐 수도 있겠네요.

지금까지 확인한 Psych::DisallowedClass 오류는 모두 이전에 공유한 스택 트레이스에 나와 있듯이 unspecified class: Symbol 클래스와 관련이 있습니다.

해당 카테고리에서 이벤트(paviliondev/discourse-events 플러그인)를 비활성화해 보았지만, 그 자체로는 차이가 없어 보였습니다.

위 오류가 플러그인을 포럼 전체에서 비활성화하는 방법(재빌드가 필요합니다)을 시도하기 전에 어떤 단서를 제공해 줄 수 있을까요?

2개의 좋아요

아쉽게도 플러그인을 비활성화해도 큰 차이가 없을 것 같습니다. 문제의 데이터는 이미 데이터베이스에 저장되어 있으므로 그대로 남아 있게 됩니다. Symbol을 허용된 클래스 목록에 안전하게 추가할 수 있을 것 같습니다. 그렇게 하겠습니다 :eyes:

수정: 명확히 하자면, 이는 사실 플러그인의 문제가 아닙니다. 이전에는 PostRevision에 어떤 데이터 타입이든 저장할 수 있었습니다. Rails 보안 취약점 때문에 갑자기 동작 방식을 변경하여 허용되는 데이터 타입을 제한해야 했습니다.

3개의 좋아요

@mentalstring - 다시 업데이트를 시도해 주실 수 있을까요? 방금 FIX: Allow Symbol objects to be deserialized in PostRevision (stable)… · discourse/discourse@f0ef186 · GitHub 을 푸시했습니다.

3개의 좋아요

그게 전부였어요 — 이제 예상대로 작동합니다! :+1:

빠르게 확인해 주셔서 감사합니다.

3개의 좋아요

안녕하세요, 업데이트 후에도 여전히 작동하지 않아요.

@darkpixlz 다음 단계를 따라 해보고 결과를 알려주시겠어요:


저는 이 내용만 보입니다.

음, 알겠습니다. User와 Group에 오류가 있는 것 같습니다. 사이트에 설치된 플러그인 목록을 공유해 주시겠어요?

1개의 좋아요

플러그인:
Discourse-Akismet
Discourse Apple Login
Discourse BCC
Discourse Cakeday
Discourse Calendar
Discourse Chat
Discourse Custom Wizard
Discourse follow
Discourse Gamification
Discourse Mate
Discourse Microsoft login
Discourse ImgFlip
Discourse Promethehus
Discourse Ratings
Discourse Solved
Discourse Spoiler
Discourse Steam Login
Discourse Tickets
Discourse Userr Network
Discourse User Notes
Discourse Voting
Discourse QA
Discourse Who’s online
Discourse Yearly Review
Discourse Manager
Styleguide
원하시면 컴포넌트를 가져다 드릴 수 있습니다

1개의 좋아요

즉, 거의 모든 기능적인 플러그인을 갖추고 있다는 뜻입니다 :rofl:

1개의 좋아요