某条消息无法在聊天中发送

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
3 个赞