로그인 없이 공개 주제에 접근할 때 발생하는 오류 3.1.0.beta2

재현 방법:
보안 설정: 모든 사람이 읽을 수 있음으로 카테고리를 생성


discourse에서 로그아웃
해당 카테고리 안의 게시물로 이동:
내 사이트:
https://forum.rat-adv.com/t/test-posta-na-chwile/1315

다음과 같은 내용을 볼 수 있습니다:

# Oops

이 토론 포럼을 구동하는 소프트웨어에서 예상치 못한 문제가 발생했습니다. 불편을 드려 죄송합니다.

오에 대한 자세한 정보는 기록(log)되었으며, 자동 알림이 생성되었습니다. 확인하겠습니다.

추가 조치는 필요하지 않습니다. 다만, 오류 상태가 지속되면 오류를 재현하는 단계를 포함하여 추가 세부 정보를 사이트의 피드백 카테고리에 토론 주제를 게시하여 제공할 수 있습니다.

discourse에 로그인하면
이 링크가 작동합니다

로그에서 다음을 볼 수 있습니다:

그리고 noMethodError 스택:

lib/guardian/topic_guardian.rb:146:in `can_recover_topic?'

app/serializers/topic_view_details_serializer.rb:119:in `include_can_recover?'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:375:in `include?'

(eval):9: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/associations.rb:200:in `serialize'

lib/freedom_patches/ams_include_without_root.rb:57:in `include!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:368:in `block in include_associations!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `each_key'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `include_associations!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:362:in `serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'

activesupport (7.0.4.1) lib/active_support/json/encoding.rb:22:in `encode'

activesupport (7.0.4.1) lib/active_support/json/encoding.rb:22:in `encode'

activesupport (7.0.4.1) lib/active_support/core_ext/object/json.rb:42: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/topics_controller.rb:1238:in `block (2 levels) in perform_show_response'

actionpack (7.0.4.1) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'

app/controllers/topics_controller.rb:1232:in `perform_show_response'

app/controllers/topics_controller.rb:187:in `show'

actionpack (7.0.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (7.0.4.1) lib/abstract_controller/base.rb:215:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/rendering.rb:53:in `process_action'

actionpack (7.0.4.1) lib/abstract_controller/callbacks.rb:234:in `block in process_action'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:118:in `block in run_callbacks'

app/controllers/application_controller.rb:414:in `block in with_resolved_locale'

i18n (1.12.0) lib/i18n.rb:322:in `with_locale'

app/controllers/application_controller.rb:414:in `with_resolved_locale'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:138:in `run_callbacks'

actionpack (7.0.4.1) lib/abstract_controller/callbacks.rb:233:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'

activesupport (7.0.4.1) lib/active_support/notifications.rb:206:in `block in instrument'

activesupport (7.0.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (7.0.4.1) lib/active_support/notifications.rb:206:in `instrument'

actionpack (7.0.4.1) lib/action_controller/metal/instrumentation.rb:66:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'

activerecord (7.0.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (7.0.4.1) lib/abstract_controller/base.rb:151:in `process'

actionview (7.0.4.1) lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'

actionpack (7.0.4.1) lib/action_controller/metal.rb:188:in `dispatch'

actionpack (7.0.4.1) lib/action_controller/metal.rb:251:in `dispatch'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:852:in `call'

lib/middleware/omniauth_bypass_middleware.rb:74:in `call'

rack (2.2.6.2) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.6.2) lib/rack/conditional_get.rb:27:in `call'

rack (2.2.6.2) lib/rack/head.rb:12:in `call'

actionpack (7.0.4.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:367:in `call'

rack (2.2.6.2) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.6.2) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/cookies.rb:704:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:99:in `run_callbacks'

actionpack (7.0.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'

logster (2.11.4) lib/logster/middleware/reporter.rb:43:in `call'

railties (7.0.4.1) lib/rails/rack/logger.rb:40:in `call_app'

railties (7.0.4.1) lib/rails/rack/logger.rb:27:in `call'

config/initializers/100-quiet_logger.rb:20:in `call'

config/initializers/100-silence_logger.rb:29:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'

lib/middleware/enforce_hostname.rb:24:in `call'

rack (2.2.6.2) lib/rack/method_override.rb:24:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.6.2) lib/rack/sendfile.rb:110:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'

rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'

message_bus (4.3.2) lib/message_bus/rack/middleware.rb:60:in `call'

lib/middleware/request_tracker.rb:228:in `call'

railties (7.0.4.1) lib/rails/engine.rb:530:in `call'

railties (7.0.4.1) lib/rails/railtie.rb:226:in `public_send'

railties (7.0.4.1) lib/rails/railtie.rb:226:in `method_missing'

rack (2.2.6.2) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.6.2) lib/rack/urlmap.rb:58:in `each'

rack (2.2.6.2) lib/rack/urlmap.rb:58:in `call'

unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'

unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'

unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'

unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'

unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/3.1.0/bin/unicorn:25:in `load'

vendor/bundle/ruby/3.1.0/bin/unicorn:25:in `<main>'

Piotr

1개의 좋아요

Hi areen. :slight_smile:

말씀하신 단계를 따라 해 보았지만 문제가 발생하지 않았습니다.

안전 모드에서 포럼의 특정 토픽에 진입을 시도해 보았는데, 모든 카테고리의 모든 토픽에서 오류가 발생했습니다.

포럼을 재구축(./launcher rebuild app)하면 문제가 계속 발생합니까? 설치된 플러그인이 있나요?

1개의 좋아요

원시 페이지 https://forum.rat-adv.com/raw/1315 를 열어서 해당 주제의 텍스트를 가져온 후, 주제를 다시 생성하면 됩니다. (다만, 손상된 주제는 여전히 여기에 남아 있게 됩니다)

안녕하세요
페이지를 원본(raw) 모드로 열 수 있다는 걸 몰랐네요. 감사합니다. 유용하게 쓰일 것 같습니다 :slight_smile:
이 주제들은 원본 모드에서 표시가 됩니다!

하지만 문제는 모든 공개(public) 페이지에서 발생합니다. 이 페이지들은 표시가 되지 않아요.

다음과 같이 시도해 보았습니다:

  • 카테고리에서 공개 권한 제거/추가
  • 공개 카테고리에 새 게시물 추가
  • 새 카테고리를 추가하여 메인 항목이 표시되는지 확인

결과는 동일합니다.
페이지 정보에서 로그에 다음과 같은 내용이 표시됩니다:

NoMethodError (undefined method `has_trust_level?' for nil:NilClass

         (SiteSetting.tl4_delete_posts_and_topics && user.has_trust_level?(TrustLevel[4]))
                                                         ^^^^^^^^^^^^^^^^^)
lib/guardian/topic_guardian.rb:146:in `can_recover_topic?'

제가 생각하기에

  1. 다운로드한 코드에 문제가 있는 것 같습니다. 소스 코드를 받아서 다시 빌드해 볼 예정입니다.
  2. 문제가 pgsqql 데이터 저장소에 있는 것일 수 있습니다. 이 경우는 해결이 더 어려울 것 같습니다.

달성한 결과를 알려드리겠습니다.

2개의 좋아요

안녕하세요
소스 코드를 확인해 보니 문제가 이 커밋에 있습니다.

로그인하지 않은 사용자는 신뢰 수준(trust level)이 있는 사용자 프로필이 없다고 생각합니다.
저는 제 저장소에서 이 메서드에 대한 변경 사항을 되돌렸지만,
다음 단계가 무엇인지 모르겠습니다. 저는 루비를 사용하지 않으니까요.

이 코드 스니펫을 수정하려면 이제 무엇을 해야 할까요?

감사합니다 …
Piotr

3개의 좋아요

안녕하세요,

해당 문제를 재현할 수 있습니다.

tl4 delete posts and topics 사이트 설정을 활성화하면 익명 사용자의 토픽이 깨집니다.

즉각적인 해결책: 수정이 적용될 때까지 이 설정을 비활성화하세요. :slightly_smiling_face:

4개의 좋아요

@kris.kotlarek 님이 이 문제를 수정한 것으로 보입니다. 다시 빌드해서 시도해 볼 수 있을까요?

3개의 좋아요

네, 오늘 이 작업을 수행하고 결과를 작성하겠습니다.

1개의 좋아요

일관성을 위해 onebox를 추가하는 것뿐입니다: :slight_smile:

1개의 좋아요

이 주제는 4일 후 자동으로 닫혔습니다. 더 이상 새로운 답변을 남길 수 없습니다.