PG::StringDataRightTruncation (错误:值对于类型 character varying(500) 来说太长)

当我尝试编辑 此主题 的首帖时,收到了 HTTP 500 错误代码。错误日志报告了以下致命错误:

消息(已报告 7 份副本)

PG::StringDataRightTruncation(错误:值对于 character varying(500) 类型过长)
app/models/topic_link.rb:240:in `safe_create_topic_link'
app/models/topic_link.rb:334:in `ensure_entry_for'
app/models/topic_link.rb:128:in `block (2 levels) in extract_from'
app/models/topic_link.rb:126:in `block in extract_from'
app/models/topic_link.rb:124:in `each'
app/models/topic_link.rb:124:in `extract_from'
lib/post_revisor.rb:224:in `revise!'
app/controllers/topics_controller.rb:379:in `update'
app/controllers/application_controller.rb:358:in `block in with_resolved_locale'
app/controllers/application_controller.rb:358:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'

回溯

rack-mini-profiler (2.3.1) lib/patches/db/pg.rb:113:in `exec'
rack-mini-profiler (2.3.1) lib/patches/db/pg.rb:113:in `async_exec'
mini_sql (1.0.1) lib/mini_sql/postgres/connection.rb:201:in `run'
mini_sql (1.0.1) lib/mini_sql/postgres/connection.rb:56:in `query_single'
app/models/topic_link.rb:240:in `safe_create_topic_link'
app/models/topic_link.rb:334:in `ensure_entry_for'
app/models/topic_link.rb:128:in `block (2 levels) in extract_from'
activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'
activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'

环境

HTTP 主机:rembetiko.gr
2 个赞

看起来问题出在 URL 上,它超过了 500 个字符。

我们确实应该进行截断,甚至可能直接跳过,而不应导致 500 错误。

帖子中最长的 URL 有多长?

4 个赞

谢谢 @sam

该帖子中唯一的 URL 来自引用部分。该链接如下:

https://rembetiko.gr/t/%CE%BC%CE%B1%CE%BA%CE%AC%CE%BC-%CE%B2%CF%85%CE%B6%CE%B1%CE%BD%CF%84%CE%B9%CE%BD%CE%BF%CE%AF-%CE%B4%CF%81%CF%8C%CE%BC%CE%BF%CE%B9/6034/30

2 个赞

那只有 159 个字符……让我们看看这里会发生什么:

Μακάμ - Βυζαντινοί Δρόμοι - #30 από kwstas_ferris - Παραδοσιακή μουσική - Ρεμπέτικο Φόρουμ

真奇怪……用那个 URL 无法复现。

也许跟它是首帖有关?

2 个赞

这与主题标题有关。当我将主题标题编辑为较短的内容时,错误就消失了。当我尝试将其恢复为原始长度时,更新标题时显示了 500 错误。500 错误出现后,我刷新了页面,标题已成功更新。

3 个赞

我进一步调查了一下:

这个问题出现在更新“被链接”的帖子(即被引用的帖子)以包含指向该引用的链接时。由于标题过长,生成的链接长度超过 500 个字符,从而触发了此问题。

如果标题非常长,被链接帖子中的实际链接将永远不会被更新。

4 个赞

@Osama 能否在你的待办事项中添加一项,以调查核心模块中更具包容性的截断机制?理想情况下,你能通过一个测试用例复现该问题。

当然,这并不紧急,等你方便时处理即可。

3 个赞

抱歉再次提醒,这个 bug 解决了吗?今天,我在我们的论坛上又遇到了第二次同样的问题……

感谢你们的辛勤工作!:smiley:

1 个赞

我们很遗憾目前有点忙,这已在 @Osama 的清单上,希望我们能在接下来的 4 周内抽空处理。

4 个赞

@chrispanag 问题现已解决:

正如您所说,当从链接帖子生成指向原始帖子的反向链接时,如果原始帖子的标题较长,就会出现该错误。

3 个赞

非常感谢您的修复!:smiley:

1 个赞

此主题已在 2 天后自动关闭。不再允许新回复。