chrispanag
(Christos Panagiotakopoulos)
7 مارس 2021، 9:40م
1
عند محاولة تعديل المنشور الأول في هذا الموضوع ، أحصل على رمز خطأ HTTP 500. تُبلغ سجلات الأخطاء عن حدوث هذا الخطأ القاتل:
الرسالة (تم الإبلاغ عن 7 نسخ)
PG::StringDataRightTruncation (ERROR: القيمة طويلة جدًا لنوع 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)
sam
(Sam Saffron)
8 مارس 2021، 4:31ص
2
يبدو أن المشكلة تتعلق بعنوان URL، حيث يتجاوز طوله 500 حرف.
يجب علينا بالتأكيد تقصيره وربما تخطيه، وليس التسبب في خطأ 500.
ما هو أطول عنوان URL في المنشور؟
4 إعجابات
chrispanag
(Christos Panagiotakopoulos)
8 مارس 2021، 9:27ص
3
شكرًا لك يا @sam ،
الرابط الوحيد الموجود في المشاركة هو من اقتباس. الرابط هو:
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)
sam
(Sam Saffron)
8 مارس 2021، 9:33ص
4
هذا هو 159 حرفًا فقط … دعنا نرى ما يحدث هنا:
Γιάννη, εκτός από τις ευχές μπου γιά Καλό Πάσχα, θέλω να πω πως πίστευα ότι το θέμα έχει λυθεί προ καιρού. Όχι μόνο από τα πρίμα-σεγκόντα και πέρα, αλλά ακόμα και στην Πειραιώτικη κομπανία, αλλά και σ΄ένα σεβαστό μέρος της Σμυρνέϊκης του Πειραιά...
Μακάμ - Βυζαντινοί Δρόμοι - #30 από kwstas_ferris - Παραδοσιακή μουσική - Ρεμπέτικο Φόρουμ
غريب جدًا… لم أستطع تكرار المشكلة مع هذا الرابط.
ربما يكون مرتبطًا بطريقة ما بكونه المنشور الأول؟
إعجابَين (2)
chrispanag
(Christos Panagiotakopoulos)
8 مارس 2021، 9:58ص
5
يرتبط الأمر بعنوان الموضوع. عندما قمت بتعديل عنوان الموضوع ليصبح أقصر، توقفت الأخطاء. وعندما حاولت إعادته إلى طوله الأصلي، ظهر لي خطأ 500 أثناء تحديث العنوان. وبعد ظهور خطأ 500، قمت بتحديث الصفحة، فتم تحديث العنوان.
3 إعجابات
chrispanag
(Christos Panagiotakopoulos)
8 مارس 2021، 1:21م
6
قمت بالتحقيق في الأمر قليلاً:
يحدث هذا عند تحديث المنشور “المربوط” (المنشور الذي تم اقتباسه) ليشمل رابطًا للاقتباس. ينتهي الأمر بالرابط (بسبب طول العنوان) إلى أن يتجاوز 500 حرف، مما يُفعّل هذه المشكلة.
الرابط الفعلي في المنشور المربوط لا يتم تحديثه أبدًا إذا كان العنوان طويلًا جدًا.
4 إعجابات
sam
(Sam Saffron)
8 مارس 2021، 10:43م
7
@Osama هل يمكنك إضافة نقطة إلى قائمتك للتحقيق في عملية قص أكثر تسامحًا في النواة، والأفضل أن تتمكن من إعادة إنتاجها في حالة اختبار.
بالتأكيد ليست عاجلة، عندما يتاح لك الوقت.
3 إعجابات
chrispanag
(Christos Panagiotakopoulos)
1 أبريل 2021، 8:23م
8
عذراً على التنبيه، ولكن هل تم معالجة هذه المشكلة؟ اليوم، واجهت حالة ثانية من حدوث ذلك في منتدانا…
شكراً لكم على كل عملكم الجاد!
إعجاب واحد (1)
sam
(Sam Saffron)
6 أبريل 2021، 2:52ص
9
لسوء الحظ، نحن مشغولون قليلاً. الأمر مدرج في قائمة @Osama ، ونأمل أن نتمكن من التعامل معه خلال الأسابيع الأربعة القادمة.
4 إعجابات
andrei
(Andrei Prigorshnev)
2 يونيو 2021، 11:32ص
14
@chrispanag تم حل المشكلة الآن:
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)).
كما ذكرت، كان الخطأ يحدث عند إنشاء رابط عكسي من المنشور المرتبط إلى المنشور الأصلي إذا كان للمنشور الأصلي عنوان طويل.
3 إعجابات
chrispanag
(Christos Panagiotakopoulos)
4 يونيو 2021، 1:32م
15
شكرًا جزيلاً على الإصلاح!
إعجاب واحد (1)
sam
(Sam Saffron)
تم إغلاقه في
5 يونيو 2021، 8:00ص
16
تم إغلاق هذا الموضوع تلقائيًا بعد يومين. لم يعد مسموحًا بإضافة ردود جديدة.