value too long for type character varying(1000) は、抜粋に関連していることを示しています。これは驚くべきことです。なぜなら、技術的には抜粋を 150 文字に制限しているため、このケースは決して発生しないはずだからです。最初は抜粋ビルダーのバグだと思いましたが、チャットで抜粋コードを見たところ、次のようなものがありました。
def build_excerpt
# メッセージ全体がURLの場合はURLのみを表示します。これは、oneboxを抜粋できないためです。
return message if UrlHelper.relaxed_parse(message).is_a?(URI)
# アップロード専用メッセージは、ファイル名として表現する方が適切です。
return uploads.first.original_filename if cooked.blank? && uploads.present?
# これは、引用などの複雑なものに対して空白を返す可能性がありますが、それは許容されます。
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