chrispanag
(Christos Panagiotakopoulos)
Março 7, 2021, 9:40pm
1
Quando tento editar a primeira postagem de este tópico , recebo um código de erro HTTP 500. Os logs de erro relatam este erro fatal ocorrendo:
Mensagem (7 cópias relatadas)
PG::StringDataRightTruncation (ERRO: valor muito longo para o tipo 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'
Backtrace
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'
Env
HTTP HOSTS: rembetiko.gr
2 curtidas
sam
(Sam Saffron)
Março 8, 2021, 4:31am
2
Parece ser algo relacionado à URL, ela tem mais de 500 caracteres.
Com certeza deveríamos truncar e talvez ignorar, em vez de resultar em um erro 500.
Qual é a URL mais longa na postagem?
4 curtidas
chrispanag
(Christos Panagiotakopoulos)
Março 8, 2021, 9:27am
3
Obrigado, @sam ,
a única URL da postagem é de uma citação. A URL é esta:
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 curtidas
sam
(Sam Saffron)
Março 8, 2021, 9:33am
4
Isso são apenas 159 caracteres… vamos ver o que acontece aqui:
Γιάννη, εκτός από τις ευχές μπου γιά Καλό Πάσχα, θέλω να πω πως πίστευα ότι το θέμα έχει λυθεί προ καιρού. Όχι μόνο από τα πρίμα-σεγκόντα και πέρα, αλλά ακόμα και στην Πειραιώτικη κομπανία, αλλά και σ΄ένα σεβαστό μέρος της Σμυρνέϊκης του Πειραιά...
Μακάμ - Βυζαντινοί Δρόμοι - #30 από kwstas_ferris - Παραδοσιακή μουσική - Ρεμπέτικο Φόρουμ
Estranho… não consegui reproduzir com esse URL.
Talvez esteja relacionado ao fato de ser a primeira postagem?
2 curtidas
chrispanag
(Christos Panagiotakopoulos)
Março 8, 2021, 9:58am
5
Isso tem a ver com o título do tópico. Quando editei o título do tópico para algo mais curto, os erros pararam. Ao tentar restaurá-lo ao seu comprimento original, foi exibido um erro 500 durante a atualização do título. Após o erro 500, atualizei a página e o título foi atualizado.
3 curtidas
chrispanag
(Christos Panagiotakopoulos)
Março 8, 2021, 1:21pm
6
Investiguei um pouco mais:
Isso ocorre na atualização do post “vinculado” (aquele que é citado) para incluir um link para a citação. O link (devido ao título longo) acaba tendo mais de 500 caracteres, o que desencadeia esse problema.
O link real no post vinculado nunca é atualizado se o título for muito longo.
4 curtidas
sam
(Sam Saffron)
Março 8, 2021, 10:43pm
7
@Osama , você pode adicionar à sua lista a investigação de um truncamento mais permissivo no core? Idealmente, você conseguiria reproduzir em um caso de teste.
Com certeza não é urgente, quando tiver uma oportunidade.
3 curtidas
chrispanag
(Christos Panagiotakopoulos)
Abril 1, 2021, 8:23pm
8
Desculpe incomodar, mas esse bug foi resolvido? Hoje, encontrei uma segunda ocorrência disso acontecendo em nosso fórum…
Obrigado por todo o seu trabalho árduo!
1 curtida
sam
(Sam Saffron)
Abril 6, 2021, 2:52am
9
Infelizmente estamos um pouco ocupados. Isso está na lista do @Osama ; esperamos poder resolver isso em algum momento nas próximas 4 semanas.
4 curtidas
andrei
(Andrei Prigorshnev)
Junho 2, 2021, 11:32am
14
@chrispanag o problema foi resolvido agora:
master ← fix/string-data-right-truncation-when-linking-posts
merged 11:27AM - 02 Jun 21 UTC
Users who use encoded slugs on their sites sometimes [run into 500 error](https:… //meta.discourse.org/t/pg-stringdatarighttruncation-error-value-too-long-for-type-character-varying-500/182426) when pasting a link to another topic in a post. The problem happens when generating a backward "reflection" link that would appear in a linked topic:
<img width="400" alt="Screenshot 2021-05-25 at 16 11 53" src="https://user-images.githubusercontent.com/1274517/119496067-29330e80-bd74-11eb-8883-87d71108b4e0.png">
Link URL restricted on the database level to 500 chars in length. At first glance it should work since we have a restriction on topic title length:
<img width="450" alt="Screenshot 2021-05-24 at 17 56 24" src="https://user-images.githubusercontent.com/1274517/119494745-b2494600-bd72-11eb-8bdc-a3e70c62fdf4.png">
But it doesn't work when a site uses encoded slugs, like [here](https://rembetiko.gr/t/%CE%B2%CF%81%CE%AE%CE%BA%CE%B1-%CE%BA%CE%AC%CF%84%CE%B9-%CE%B3%CE%B9%CE%B1-%CE%BC%CE%AD%CE%BD%CE%B1-%CF%84%CE%BF-%CF%81%CE%B5%CE%BC%CF%80%CE%AD%CF%84%CE%B9%CE%BA%CE%BF-%CF%84%CF%81%CE%B1%CE%B3%CE%BF%CF%8D%CE%B4%CE%B9-%CE%B5%CE%AF%CE%BD%CE%B1%CE%B9-%CE%BA%CE%B1%CF%84%CE%AC-%CE%B2%CE%AC%CF%83%CE%B9%CE%BD-%CE%B1%CF%81%CE%BC%CE%BF%CE%BD%CE%B9%CE%BA%CE%BF-%CE%BA%CE%B1%CE%B9-%CE%B4%CE%B9%CE%AC-%CF%84%CE%BF%CF%8D%CF%84%CE%BF-%CF%80%CE%BF%CE%BB%CF%85%CF%86%CF%89%CE%BD%CE%B9%CE%BA%CE%BF/42000) (take a look at the URL). The link to a topic, in this case, can be much longer than 500 characters.
By the way, an error happens only when generating a "reflection" link and doesn't happen with a direct link, we [truncate that link](https://github.com/discourse/discourse/blob/6e2ecf40c7456a1af7f6470d09921f0138fbd4bb/app/models/topic_link.rb#L309). It works because, in this case, the original long link is still present in the post body and can be used for navigation. But we can't do the same for backward "reflection" links (without rewriting their implementation), the whole link must be saved to the database.
The simplest and cleanest solution will be just to remove the restriction on the database level. Abuse is impossible here since we are already protected by the restriction on topic title length. There aren’t performance benefits in using length-constrained columns in Postgres, in fact, length-constrained columns need a few extra CPU cycles to check the length when storing data ([doc](https://www.postgresql.org/docs/9.3/datatype-character.html)).
Como você disse, o erro ocorria ao gerar um link de retorno da postagem vinculada para a postagem original, caso a postagem original tivesse um título longo.
3 curtidas
chrispanag
(Christos Panagiotakopoulos)
Junho 4, 2021, 1:32pm
15
Muito obrigado pela sua correção!
1 curtida
sam
(Sam Saffron)
Fechado
Junho 5, 2021, 8:00am
16
Este tópico foi fechado automaticamente após 2 dias. Novas respostas não são mais permitidas.