ArgumentError (превышен лимит атрибутов на элемент) от rebake

Итак, я пересобрал свои посты昨晚 после настройки CDN, и всё прошло гладко, за исключением одной задачи Jobs::ProcessPost в Sidekiq, которая постоянно падает и повторяется. В частности, она завершается ошибкой:

Wrapped ArgumentError: Attributes per element limit exceeded

Стек вызовов из /logs выглядит следующим образом…

Сообщение (13 записей)

Исключение в задаче: Attributes per element limit exceeded

Стек вызовов

/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])

внутри метода execute класса ProcessPost, а оттуда переходит в post_process_oneboxes.

Теперь я провёл более глубокое расследование и смог найти конкретный пост с помощью консоли Rails. Он содержит только одну ссылку, без изображений и истории редактирования.

Хорошо, и после дополнительного анализа указанной ссылки выяснилось, что это полный и абсолютный мусор. Это пост в блоге, где весь текст был скопирован дословно и в мета-тег og:description, и в twitter:description. Но хуже всего то, и именно это, как я полагаю, вызывает проблему: текст содержит символы " (кавычки), которые не были экранированы, из-за чего оба эти тега полностью ломаются, и большая часть текста воспринимается как атрибуты.

Таким образом, содержимое конкретной ссылки — полный мусор. Возможно, было бы лучше обрабатывать такие случаи отдельно, вместо того чтобы постоянно вызывать сбои в задаче Sidekiq. Не уверен, хотите ли вы заняться этим вопросом?

В остальном у меня остаётся лишь пара вопросов. Во-первых, система в конце концов перестанет пытаться выполнить эту задачу, или мне нужно что-то сделать? Во-вторых, что-нибудь может быть повреждено из-за того, что задача не выполняется успешно, учитывая, что там только текст и одна ссылка?

2 лайка

Ого!!!

Да, мы должны автоматически решать подобные проблемы… PR уже создан, его скоро должны слить.

Спасибо за тщательную отладку!

3 лайка

Спасибо @sam, рад, что это помогло.

2 лайка