تحديث عناوين URL داخل استطلاع بعد تغيير شبكة CDN

لقد أنشأت استطلاع رأي على منتداي كالتالي:

[poll name=freestyle type=multiple results=always min=1 max=14 public=true chartType=bar]
* **#1** ![DSC_2281.jpg|332x500, 33%](upload://ujMDcnd4syevNGdEN2O1qUTeWeK)
* **#2** ![IMG_3248.jpg|690x459, 33%](upload://tsecEjlruXEpg3faidWmENBupM4)
[/poll]

لقد انتقلت من استخدام شبكة توصيل المحتوى (CDN) إلى عدم استخدامه، وتم تغيير عناوين URL من cdn.unicyclist.com إلى unicyclist.com.

ومع ذلك، تظل روابط الصور هنا معطلة، رغم ظهورها بشكل صحيح في معاينة المنشور:

لم تؤدِ إعادة معالجة المنشورات وتشغيل الأمر rake 'posts:remap[cdn.unicyclist.com,unicyclist.com]' إلى إصلاح المشكلة.

يقترح موقع ask.discourse.org ما يلي:

ما الذي يحدث على الأرجح

خيارات الاستطلاع الخاصة بك لا توجد فقط في النص الخام للمنشور. في مخطط موقعك، تخزن الاستطلاعات أيضًا HTML المُعالَج للخيارات في:

  • polls
  • poll_options.html

لذا قد تبدو معاينة المنشور سليمة، لكن مُعالج الاستطلاع قد لا يزال يستخدم HTML قديمًا يحتوي على اسم المضيف القديم لشبكة CDN.

وثائق ذات صلة:

تحذير مهم

قم بأخذ نسخة احتياطية كاملة أولاً.

أيضًا، تجنب “التعديل المباشر” للاستطلاع إذا كان يحتوي على أصوات، لأن تعديلات الاستطلاع عادةً ما تؤدي إلى مسح الأصوات:

نهج أكثر أمانًا: فحص استطلاع معطل واحد أولاً

داخل الحاوية:

cd /var/discourse
./launcher enter app
rails c

ثم ابحث عن الاستطلاع الخاص بذلك المنشور:

poll = Poll.find_by(post_id: POST_ID, name: "freestyle")
PollOption.where(poll_id: poll.id).pluck(:id, :html)

إذا رأيت cdn.unicyclist.com في ذلك HTML، فهذا يؤكد المشكلة.

إصلاح ذلك الاستطلاع الواحد

poll = Poll.find_by(post_id: POST_ID, name: "freestyle")

PollOption.where(poll_id: poll.id).find_each do |opt|
  new_html = opt.html.gsub("cdn.unicyclist.com", "unicyclist.com")
  opt.update_columns(html: new_html, updated_at: Time.zone.now)
end

ثم أعد معالجة ذلك المنشور أيضًا:

Post.find(POST_ID).rebake!

إذا نجح الأمر، قم بإصلاح جميع خيارات الاستطلاع دفعة واحدة

PollOption.find_each do |opt|
  next unless opt.html&.include?("cdn.unicyclist.com")
  opt.update_columns(
    html: opt.html.gsub("cdn.unicyclist.com", "unicyclist.com"),
    updated_at: Time.zone.now
  )
end

لماذا لم يُفلح الأمر posts:remap؟

لأن مهمة Rake هذه مخصصة لـ محتوى المنشور، بينما توجد مراجع الصور المعطلة على الأرجح في ذاكرة التخزين المؤقت لـ HTML خيارات الاستطلاع بدلاً من ذلك:

التوصية

  1. اختبر الأمر على استطلاع واحد معطل
  2. تأكد من تحميل الصور
  3. فقط بعد ذلك قم بتشغيل الإصلاح الشامل

إذا أردت، يمكنني كتابة سكربت جاهز للنسخ واللصق حيث تقوم فقط باستبدال POST_ID وتشغيله بأمان على استطلاع واحد أولاً.

هل يبدو ذلك جيدًا بالنسبة لك؟ سأقوم بأخذ نسخة احتياطية أولاً بالطبع، لكنني أفضل تجنب الحاجة إلى استعادة منتداي.

أحتاج إلى الاحتفاظ بجميع نتائج الاستطلاعات :slight_smile:

سؤال إضافي: هل ينبغي لـ Discourse معالجة هذه الحالات بشكل أصلي؟