# rebake 的 ArgumentError (每个元素属性限制超出)

**URL:** https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812
**Category:** Bug
**Created:** [2022年八月22日 12:05 UTC](https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812 "2022-08-22T12:05:47Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![knewt](https://avatars.discourse-cdn.com/v4/letter/k/76d3ee/32.png) [@knewt](https://meta.discourse.org/u/knewt)
#### Post date: [2022年八月22日 12:05 UTC](https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812/1 "2022-08-22T12:05:47Z")

</div>

我昨晚设置了 CDN 后重新烘烤了我的帖子，一切顺利，除了 Sidekiq 中有一个 `Jobs::ProcessPost` 作业一直在失败和重试。具体来说，它以一个 `Wrapped ArgumentError: Attributes per element limit exceeded` 错误失败。来自 /logs 的回溯如下…

> 消息（报告了 13 份副本）
> 
> 作业异常：Attributes per element limit exceeded
> 
> 回溯
> 
> ```plaintext
> /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`
> 
> ```plaintext
> 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 元标签中。但是，更糟糕的是，我猜这会导致问题，文本中包含一些未转义的“字符，因此完全破坏了这两个标签，并使大部分文本看起来像属性。
> 
> 所以特定 URL 的内容是完全垃圾。我想对于这类事情最好能被特别处理，而不是反复崩溃 sidekiq 作业，不知道你是否想调查一下？
> 
> 否则，我只剩下几个问题。首先，它最终会停止尝试运行此作业，还是我需要做些什么？其次，由于作业未能成功运行，只有一些文本和这个 URL，会不会有什么东西被搞砸了？

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2022年八月23日 05:01 UTC](https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812/2 "2022-08-23T05:01:07Z")

</div>

> [@knewt](#):
>
> 这是一篇博文，他们将整篇博文逐字复制到了 og:description 和 twitter:description 元标签中。但更糟糕的是，也是我假设导致问题的原因，文本中包含一些未转义的“字符，因此完全破坏了这两个标签，并使大部分文本看起来像属性。

哎呀！！！

> [@knewt](#):
>
> 所以特定网址的内容是一堆垃圾。我想，最好能专门处理这类问题，而不是反复导致 sidekiq 作业崩溃，不知道你是否想对此进行调查？

是的，我们应该自动处理这类问题……PR 在这里，很快就会合并。

> <https://github.com/discourse/discourse/pull/18040>
>
> Certain HTML can be rejected by nokogumbo, specifically cases where there
> are en…ormous amounts of attributes
> 
> This ensures that malformed HTML is simply skipped instead of leaking out
> an exception and terminating downstream processes.

感谢你在此处进行的详尽调试！

---

<div class="post-metadata">

### Author: ![knewt](https://avatars.discourse-cdn.com/v4/letter/k/76d3ee/32.png) [@knewt](https://meta.discourse.org/u/knewt)
#### Post date: [2022年八月23日 14:03 UTC](https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812/3 "2022-08-23T14:03:49Z")

</div>

谢谢 @sam，很高兴能帮到你。

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [2022年九月6日 06:08 UTC](https://meta.discourse.org/t/argumenterror-attributes-per-element-limit-exceeded-from-rebake/236812/4 "2022-09-06T06:08:43Z")

</div>


