rebake에서 발생한 ArgumentError (Attributes per element limit exceeded)

그래서 CDN을 설정한 후 지난밤에 내 게시물들을 다시 재처리(rebake)했는데, sidekiq의 Jobs::ProcessPost 작업 하나만 계속 실패하고 재시도되고 있을 뿐 모든 것이 정상적으로 진행되었습니다. 구체적으로 다음과 같은 오류로 실패합니다.

Wrapped ArgumentError: Attributes per element limit exceeded

/logs의 백트레이스는 다음과 같습니다…

Message (13 copies reported)

Job exception: Attributes per element limit exceeded

Backtrace

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/html5/document.rb:85:in `parse'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/html5/document.rb:85:in `do_parse'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/html5/document.rb:43:in `parse'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/html5.rb:31:in `HTML5'
/var/www/discourse/lib/retrieve_title.rb:21:in `extract_title'
/var/www/discourse/lib/retrieve_title.rb:91:in `block in fetch_title'
/var/www/discourse/lib/final_destination.rb:499:in `block (4 levels) in safe_get'
/var/www/discourse/lib/final_destination.rb:496:in `catch'
/var/www/discourse/lib/final_destination.rb:496:in `block (3 levels) in safe_get'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/net-protocol-0.1.3/lib/net/protocol.rb:498:in `call_block'

음, 로그 페이지의 복사 버튼을 사용했는데, 이로 인해 백트레이스가 잘려나간 것 같습니다. 더 많은 정보가 필요하시거나 원하신다면 제공해 드릴 수 있습니다. 말씀드릴 수 있는 것은 cp.post_process로 진입한다는 것입니다.

cp = CookedPostProcessor.new(post, args)
cp.post_process(new_post: args[:new_post])

ProcessPost의 execute 메서드 내에서, 그리고 거기서 post_process_oneboxes로 넘어가는 것 같습니다.

이제 더 깊이 조사하여 rails 콘솔을 사용해 특정 게시물을 찾아냈습니다. 해당 게시물에는 단일 URL만 포함되어 있으며, 이미지나 편집 이력은 없습니다.

자, 문제의 URL을 좀 더 조사해 보니, 완전히 엉망입니다. 블로그 게시물인데, 전체 게시물을 og:description과 twitter:description 메타 태그 양쪽에 그대로 복사해 넣었습니다. 하지만 더 나쁜 것은, 그리고 제가 문제의 원인으로 추정하는 것은, 텍스트에 이스케이프하지 않은 " 문자가 포함되어 있어 이 두 태그를 완전히 깨뜨리고, 대부분의 텍스트가 속성(attribute)처럼 보이게 만든다는 점입니다.

즉, 해당 URL의 내용은 완전히 쓸모없는 상태입니다. 이런 경우를 특별히 포착하는 것이 sidekiq 작업이 반복적으로 충돌하는 것보다 더 나을 것 같다는 생각이 듭니다. 이것을 살펴보실 의향이 있으신지 모르겠습니다.

그렇지 않다면, 제게 남는 질문은 두 가지뿐인 것 같습니다. 첫째, 결국 이 작업을 실행하는 것을 포기하게 될까요, 아니면 제가 무언가 해야 하는 것일까요? 둘째, 작업이 성공적으로 실행되지 못하고 텍스트 일부와 이 하나의 URL만 있는 상태에서, 무언가 엉망이 될 수 있는 부분이 있을까요?

2개의 좋아요

역시 끔찍하네요!!!

네, 이런 종류의 문제는 자동으로 처리해야 합니다… PR을 올렸으니 곧 병합될 것입니다.

꼼꼼한 디버깅에 감사합니다!

3개의 좋아요

@sam, 도움이 되어 기뻐요.

2개의 좋아요