잠긴 토픽의 diff를 열려 할 때 ArgumentError(Attributes per element limit exceeded) 발생

토픽 버전 차이를 보기 위해 “편집” 아이콘을 클릭할 때 ArgumentError (Attributes per element limit exceeded) 발생.

개발자 콘솔

로그

Message (2 copies reported)

ArgumentError (Attributes per element limit exceeded)
lib/discourse_diff.rb:171:in `tokenize_html_blocks'
lib/discourse_diff.rb:10:in `initialize'
app/serializers/post_revision_serializer.rb:117:in `new'
app/serializers/post_revision_serializer.rb:117:in `body_changes'
(eval):18:in `_fast_attributes'
app/controllers/application_controller.rb:520:in `render_json_dump'
app/controllers/posts_controller.rb:408:in `latest_revision'
app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
app/controllers/application_controller.rb:397: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:356: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:187:in `call'

Backtrace

nokogiri-1.12.5-x86_64 (linux) lib/nokogiri/html5/document_fragment.rb:38:in `fragment'
nokogiri-1.12.5-x86_64 (linux) lib/nokogiri/html5/document_fragment.rb:38:in `initialize'
nokogiri-1.12.5-x86_64 (linux) lib/nokogiri/html5/document_fragment.rb:52:in `new'
nokogiri-1.12.5-x86_64 (linux) lib/nokogiri/html5/document_fragment.rb:52:in `parse'
nokogiri-1.12.5-x86_64 (linux) lib/nokogiri/html5.rb:242:in `fragment'
lib/discourse_diff.rb:171:in `tokenize_html_blocks'
lib/discourse_diff.rb:10:in `initialize'
app/serializers/post_revision_serializer.rb:117:in `new'
app/serializers/post_revision_serializer.rb:117:in `body_changes'
(eval):18:in `_fast_attributes'

Env

HTTP HOSTS: jai.community

이것이 우리가 여러분을 위해 호스팅하는 사이트에서 발생한 문제인가요? 병리적 행동을 유발하는 diff를 확인해야 합니다.

자체 호스팅 방식입니다. 차이를 공유하는 가장 좋은 방법은 무엇일까요?

비밀이 없다면, 여기에서 재현해 볼 수 있을까요? 그냥 답변을 게시한 후 10분을 기다렸다가 문제를 수정해 보세요.

이것은 공개된 커뮤니티가 아니며, 해당 자료는 비공개 베타 제품에 관한 내용입니다. 따라서 자료의 저자와 디스커스(Discourse) 팀에 대한 존중의 의미를 담아, 여기에서 공유하는 것을 자제하겠습니다. 다른 간단한 방법이 있을까요?

1개의 좋아요

분할 정복 전략을 써야 할 것 같습니다. 문제의 원인이 되는 코드를 찾을 때까지 재현 코드를 점점 더 작게 만들어 보세요.

1개의 좋아요

메타에서 해당 특정 주제의 내용을 개인 메시지로 보내드릴까요?

자유롭게 해주세요. 특히 재현(repro)이 가능하다면 더 좋습니다.

저도 매우 유사한(또는 관련이 있는) 문제를 경험하고 있습니다.

재현 방법 / 원인:

  • 이 문제는 매우 긴 게시글(약 100,000자)에서 발생합니다.
  • 구체적으로 대규모 수정(콘텐츠의 상당 부분이 변경될 때)에 의해 발생합니다.

이러한 방대한 편집을 저장하려고 하면 백엔드가 종종 타임아웃(502/504)에 도달합니다. 근본 원인은 구버전과 신버전 간의 Diff 계산이라고 추정하는데, 이 두 조건이 결합되면 비용이 극도로 높아지기 때문입니다.

이 이슈는 해당 토론이 다음 링크에서 계속되고 있으므로 닫겠습니다.