저도 마찬가지이고, 오늘 업데이트를 했습니다. Discourse에서 그런 건가요?
이제 좀 더 자세히 파보겠습니다.
음, 네분의 문제는 서버 측 오류인 것 같은데 @Jagster 그건 별개의 문제일 거예요. 또한 이 변경사항은 아직 병합되지 않았으므로 셀프호스팅 사이트에는 영향을 주지 않아야 합니다.
맞아요, 하지만 저는 로그인된 상태였어요. OP의 에러는 익명 사용자에게 발생하는 거예요. 그리고 어쨌든 두 경우 모두 카테고리에서 발생하는 문제예요.
Discourse에서:
HasCustomFields::NotPreloadedError (Attempted to access the non preloaded custom field 'sort_topics_by_event_start_date' on the 'Category' class.
그리고
Message
HasCustomFields::NotPreloadedError (Attempted to access the non preloaded custom field 'sort_topics_by_event_start_date' on the 'Category' class. This is disallowed to prevent N+1 queries.)
app/models/concerns/has_custom_fields.rb:203:in `[]'
(eval):47:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:531:in `serialize_data'
app/controllers/application_controller.rb:540:in `render_serialized'
app/controllers/categories_controller.rb:408:in `categories_and_topics'
app/controllers/categories_controller.rb:99:in `categories_and_latest'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:389:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10: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:233:in `call'
Backtrace
app/models/concerns/has_custom_fields.rb:203:in `[]'
plugins/discourse-calendar/plugin.rb:88:in `block (2 levels) in activate!'
(eval):47: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/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
그러니까… 다음으로 캘린더 플러그인을 제거하면 되는 거죠?
수정
사이드바의 카테고리 링크는 잘 작동하지만, 다른 모든 카테고리 링크는 오류가 발생합니다.
이 오류를 어느 정도 제한적으로 재현해 봤습니다. 카테고리 하위에 하위 카테고리가 있을 때만 발생합니다. 또한 /categories 경로에서도 500 오류가 발생합니다.
여전히 이 문제가 Calender 플러그인에서 비롯된 것인지 확신이 서지 않습니다. 만약 그렇다면, 이 또한 safe-mode가 무용지물이 되는 또 다른 사례일까요?
하지만 Lockdown 플러그인은 다음과 같은 내용을 출력합니다:
Message
HasCustomFields::NotPreloadedError (Attempted to access the non preloaded custom field 'redirect_url' on the 'Category' class. This is disallowed to prevent N+1 queries.)
app/models/concerns/has_custom_fields.rb:203:in `[]'
(eval):49:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:531:in `serialize_data'
app/controllers/application_controller.rb:540:in `render_serialized'
app/controllers/categories_controller.rb:408:in `categories_and_topics'
app/controllers/categories_controller.rb:99:in `categories_and_latest'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:389:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10: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:233:in `call'
Backtrace
app/models/concerns/has_custom_fields.rb:203:in `[]'
plugins/discourse-category-lockdown/plugin.rb:18:in `block (2 levels) in activate!'
(eval):49: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:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
Env
HTTP HOSTS: foorumi.katiska.eu
따라서 이 문제가 플러그인이 아니라 Discourse 자체에서 비롯된 것이라고 꽤 확신하지만, 다시 한번 말씀드리자면 저는 개발자가 아닙니다.
질문을 올린 당사자(OP)입니다. 캘린더 플러그인은 설치되어 있지 않습니다(해당 플러그인이 없는 호스팅된 Discourse 레벨을 사용 중입니다).
"하위 범주가 원인이 된다"는 추측이 맞을 수도 있습니다… 현재 제 사이트가 꽤나 망가져 있어서 지금은 판단이 어렵습니다. 하지만 방금 카테고리를 하나 만들었습니다… (어떻게 작동하는지 잊어버렸는데) 새 카테고리가 기본적으로 예를 들어 ‘Public’ 아래에 배치되는 것이라면, 방금 제가 첫 번째 하위 카테고리를 (실수로) 만든 셈이 됩니다.
오류가 실제로 그런 것처럼 보입니다… sort_topics_by_event_start_date…
여기서 등록됩니다:
카테고리에 대해서는 여기서:
현재 진행 중인 카테고리 확장성 작업으로 인한 회귀(regression)일 것 같은 느낌이 듭니다… 확인해 보겠습니다.
아, 좋네요! 이미 보고된 내용이었군요. 검색이 더 잘되도록 이 내용을 아래에 남겨둘게요.
while trying to load /categories.json)
이 문제를 조사하고 있습니다.
이 문제는 discourse-calendar로 인해 발생했으며, 플러그인의 최신 버전(곧 출시 예정)에서 수정될 예정입니다:
이것은 discourse-category-lockdown에서 발생한 문제로, 우리가 통제할 수 있는 범위가 아닙니다. 다만, 해당 프로젝트에 PR을 제출할 수는 있습니다.
추가적인 문제 추적은 여기에서 수행됩니다: non preloaded custom field - Discourse Category Lockdown - Pavilion
원인이 뭔가요? 그래서 두 플러그인 모두 X라는 동일한 이유로 같은 버그가 발생했나요, 아니면 Discourse에서 두 플러그인 모두에 영향을 미치는 변경 사항을 했나요?
누구를 탓하려는 건 아니에요. 그냥 전문 용어를 이해하려고 하는 것뿐입니다.
최근의 성능 개선으로 인해 이 문제가 발생했습니다. 커스텀 필드는 코드베이스에서 유니코너(극히 드물고 특별한 요소)와도 같으며, 다양한 플러그인이 기능을 확장하는 데 사용할 수 있습니다. 그러나 올바르게 사용하지 않으면 성능 저하로 이어질 수 있습니다. 이 개선 사항은 바로 그 문제를 해결하기 위한 것입니다:
해당 문제에 대한 PR을 여기에 제출했지만, 우리가 접근할 수 없는 저장소입니다:
병합된 걸 봤고, 재빌드하니 문제가 해결됐어요
항상처럼 빠른 수정 감사합니다.
네, 잘 작동합니다. 정말 감사합니다.
다만, Category Lockdown은 영원히 돌아가는 로딩 스피너를 표시하긴 합니다(이 문제는 Firefox/iPad의 por…스파이 모드에서도 발생할 수 있을 것 같습니다). 하지만 이건 별개의 문제라고 봅니다.