昨夜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'
ログページでコピーボタンを使用したのですが、バックトレースが切り取られてしまったようです。もし必要であれば、さらに取得できます。ProcessPostのexecuteメソッド内の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のみが残った場合、何か問題が発生しますか?