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 HOSTS: rembetiko.gr
2 лайка

Похоже, проблема связана с URL: он длиннее 500 символов.

Мы точно должны обрезать его и, возможно, пропустить, а не возвращать ошибку 500.

Какой самый длинный URL в посте?

4 лайка

Спасибо @sam,

единственный URL в этом сообщении находится в цитате. Вот этот 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 лайка

Извините, что напоминаю, но эта проблема была решена? Сегодня я столкнулся со вторым случаем подобного на нашем форуме…

Спасибо за вашу тяжелую работу! :smiley:

1 лайк

К сожалению, мы сейчас немного заняты. Это есть в списке у @Osama, надеемся, что сможем заняться этим в течение следующих 4 недель.

4 лайка

@chrispanag проблема решена:

Как вы и сказали, ошибка возникала при создании обратной ссылки от связанного сообщения на исходное, если у исходного сообщения была длинная заголовка.

3 лайка

Огромное спасибо за ваше исправление! :smiley:

1 лайк

Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не принимаются.