value too long for type character varying(1000) 告诉我这与 excerpt 有关。这令人惊讶,因为技术上我们限制 excerpt 为 150 个字符,所以这种情况不应该发生。起初我以为是我们的 excerpt builder 中存在 bug,但查看 chat 中的 excerpt 代码时,我看到了这个:
def build_excerpt
# 如果整个消息都是 URL,则只显示 URL,因为我们无法 excerpt oneboxes
return message if UrlHelper.relaxed_parse(message).is_a?(URI)
# 仅上传的消息最好表示为文件名
return uploads.first.original_filename if cooked.blank? && uploads.present?
# 对于一些复杂的东西,比如引用,这可能会返回 blank,这是可以接受的
PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end
快速调试表明,我们实际上从未达到 PrettyText.excerpt,而是在第一个 return 处停止。显然 ??? 使得我们的代码认为这是一个 URL:
[1] pry(main)> UrlHelper.relaxed_parse("???\ntest").is_a?(URI)
=> true