rebake から ArgumentError (Attributes per element limit exceeded)

昨夜CDNをセットアップした後、投稿を再ベイクしましたが、SidekiqのJobs::ProcessPostジョブが1つだけ失敗し続けてリトライする以外はすべて順調でした。具体的には、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'

ログページでコピーボタンを使用したのですが、バックトレースが切り取られてしまったようです。もし必要であれば、さらに取得できます。ProcessPostexecuteメソッド内のcp.post_processから、post_process_oneboxesに移行しているように見えます。

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

さらに詳しく調査したところ、Railsコンソールを使用して特定の投稿を特定することができました。その投稿にはURLが1つだけ含まれており、画像や編集履歴はありません。

さて、問題のURLをさらに調査したところ、それは完全なゴミでした。ブログ記事で、og:descriptionとtwitter:descriptionのメタタグの両方に記事全体がそのままコピーされていました。しかし、さらに悪いことに、これが問題を引き起こしていると思われるのですが、テキストにはエスケープされていない「文字が含まれており、これらのタグの両方を完全に台無しにし、ほとんどのテキストが属性のように見えています。

したがって、特定のURLの内容は完全にゴミです。このようなものは、サイクロイドジョブを繰り返しクラッシュさせるのではなく、具体的に検出する方が良いのではないかと思います。これは検討すべきことでしょうか?

そうでなければ、私からの質問は2つだけです。まず、このジョブは最終的に実行を停止するのでしょうか、それとも何かする必要があるのでしょうか?第二に、ジョブが正常に実行されず、テキストとこのURLのみが残った場合、何か問題が発生しますか?

「いいね!」 2

うわー!!!

はい、このような問題は自動的に処理する必要があります… PRはこちらです。まもなくマージされるはずです。

詳細なデバッグ、ありがとうございました!

「いいね!」 3

@samさん、ありがとうございます。お役に立てて嬉しいです。

「いいね!」 2