فشل إعادة الخبز عند تغيير اسم النطاق الفرعي فقط

مرحبًا

لقد قمت مؤخرًا بنسخ مجلد قاعدة البيانات /shared من بيئة الإنتاج إلى خادم الاختبار (لمطابقة البيئتين).

أدركت أن الروابط تشير إلى النطاق السابق، لذا اتبعت هذا الدليل

عند تشغيل هذا الأمر داخل الحاوية:

discourse remap forums.coretabs.net discourse.coretabs.net

ظهرت لي رسالة خطأ duplicate key value:

Rewriting all occurences of forums.coretabs.net to discourse.coretabs.net
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES)
YES
Error: ERROR:  duplicate key value violates unique constraint "index_incoming_domains_on_name_and_https_and_port"
DETAIL:  Key (name, https, port)=(discourse.coretabs.net, t, 443) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.

نعم، لا أعتقد أن لدينا معالجة للتعارضات مدمجة، ولديك روابط واردة لكلا النطاقين.

ستحتاج إلى حذف العناصر يدويًا من جدول المشكلات قبل تشغيل هذه المهمة.

شكرًا لك سام على الرد السريع!

هل يمكنك إرشادي إلى المكان الذي يمكنني من خلاله تعديل الجدول الذي يسبب المشكلة؟

rails c
DB.exec "update from incoming_domains set name='discourse-old.coretabs.net' where name = 'discourse.coretabs.net'"

من المرجح أن هذا ما تريده؛ فسيؤدي إلى عدم اتساق طفيف في البيانات، لكن على الأقل من المرجح أن تعمل عملية إعادة التوجيه.

إذن، هذا ما فعلته:

  1. نفذت الأمر الذي أشرت إليه (بدون from :grin:)

  2. أعدت تشغيل عملية إعادة الخبز، لكنها توقفت هنا:

Rewriting all occurences of forums.coretabs.net to discourse.coretabs.net
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES)
YES
incoming_domains=1
incoming_referers=3
invites=1
javascript_caches=1
post_revisions=509
posts=84
single_sign_on_records=1099
theme_fields=4
topic_custom_fields=4
Error: ERROR:  duplicate key value violates unique constraint "unique_post_links"
DETAIL:  Key (topic_id, post_id, url)=(69, 212, https://discourse.coretabs.net/t/topic/365) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
  1. بحثت في جوجل عن "unique_post_links" ووجدت أن اسم الجدول هو topic_links من ملف schema.sql

  2. هذه المرة كانت الروابط جزئية، لذا استخدمت استعلام استبدال:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. أعدت تشغيل عملية إعادة الخبز.

عملت بسلاسة، شكرًا لك سام :rose: