هذا لن يسمح لـ Discourse بتنزيل هذه الصور حتى تكون لديك عندما لم تعد متاحة من photobucket، ولكنه سيعرضها.
لذلك، ستحتاج إلى الانتقال إلى rails، والحصول على جميع المشاركات التي تحتوي على ^https://hosting.photobucket.com، وإجراء استبدال لاستبدال عناوين URL العارية بـ 
انتظر. عندما كتبت هذا لأول مرة، لم يتم عرض عنوان URL العلوي، ولكن لاحقًا يبدو أن Discourse تمكن من تنزيله! (وعمل على خادم الاختبار الخاص بي أيضًا!)
أحتاج إلى تشغيل أمر rails للعثور على كل تلك المنشورات ثم استخدام gsub لاستبدال [URL…][/URL] بعنوان URL الفعلي فقط حتى يتم عرضه في one-box
DiscourseHelper:
البحث
البحث عن: كيف يمكنني استخدام أمر Rails أو كود وحدة التحكم للعثور على جميع المنشورات التي تحتوي على تنسيق سلسلة محدد مثل علامات [URL] ثم استبدال تلك العلامات بعنوان URL المحتوي عليها فقط في Discourse؟
للعثور على جميع مثيلات [URL]...[/URL] واستبدالها فقط بعنوان URL المحتوي عليها في منشورات Discourse الخاصة بك، يمكنك تحقيق ذلك باستخدام Rails في وحدة تحكم Discourse. إليك كيفية القيام بذلك:
الخطوات:
الوصول إلى وحدة تحكم Rails:
تحتاج إلى الوصول عبر SSH إلى الخادم الخاص بك. قم بتشغيل الأمر التالي للوصول إلى وحدة تحكم Rails الخاصة بـ Discourse:
cd /var/discourse
./launcher enter app
rails c
تشغيل أمر البحث والاستبدال:
استخدم مقتطف الكود التالي لتحديد المنشورات التي تحتوي على [URL]...[/URL] واستبدالها.
Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_cooked != post.cooked
post.update!(cooked: updated_cooked)
PostRevisor.new(post, Discourse.system_user).revise!(
post.user,
{ cooked: updated_cooked },
revised_at: Time.now
)
puts "Updated post id: #{post.id}"
end
end
اختبار البرنامج النصي:
قبل استبدال المحتوى بشكل جماعي، قم بتشغيل منطق gsub على منشور واحد للتأكد من أنه يعمل كما هو متوقع.
تشغيل البرنامج النصي والمراقبة:
قم بتنفيذ البرنامج النصي الكامل، وراقب المخرجات، وصحح أي أخطاء إذا لزم الأمر.
ملاحظات:
يستخدم هذا البرنامج النصي التعبيرات العادية (Regex) (\[URL=.*?\\](.*?)\\[\\/URL\\]) لمطابقة النمط المحدد واستبداله. تأكد من أن النمط يطابق احتياجاتك بالضبط.
يستخدم PostRevisor لضمان تسجيل التغييرات في سجل تعديلات المنشور.
تأكد من الاختبار الشامل ونسخ قاعدة البيانات احتياطيًا قبل تنفيذ أي تغييرات جماعية.
للحصول على إرشادات إضافية، تحقق من الوثائق ذات الصلة على meta.discourse.org. إذا واجهت مشكلات، فلا تتردد في مشاركة التفاصيل هنا!
pfaffman:
يجب استبدالها في raw، وليس cooked
DiscourseHelper:
شكراً للتوضيح! بما أن التغييرات يجب أن تتم في raw (محتوى المنشور الأصلي)، يمكننا تعديل البرنامج النصي للعمل مع حقل raw بدلاً من ذلك. إليك كيفية تحقيق ذلك:
أمر Rails المحدث لحقل raw
تعديل وتشغيل البرنامج النصي:
فيما يلي البرنامج النصي المحدث لمعالجة واستبدال علامات [URL]...[/URL] في حقل raw للمنشورات:
# البحث عن جميع المنشورات التي يحتوي فيها raw على علامة [URL]
Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_raw != post.raw
# تحديث محتوى raw
post.update!(raw: updated_raw, cooked: nil)
# تشغيل إعادة التحميض لتوليد محتوى cooked مرة أخرى
post.rebake!
puts "Updated post id: #{post.id}"
end
end
شرح التغييرات:
raw بدلاً من cooked: يحتوي حقل raw على محتوى المنشور الأصلي، لذا يتم تطبيق عملية gsub على نص raw.
إعادة تعيين cooked: يؤدي تعيين cooked إلى nil إلى ضمان إعادة تحميض المنشور (معالجته) بشكل صحيح.
rebake!: يؤدي هذا إلى تشغيل عملية إعادة التحميض، والتي تعيد توليد النسخة cooked (المعروضة بتنسيق HTML) للمنشور من المحتوى raw المحدث.
اختبار Gsub لمحتوى Raw:
اختبر استبدال التعبير العادي على منشور واحد للتأكد من أنه يعمل بشكل صحيح:
تشغيل التحديث الجماعي:
بمجرد التأكد من أنه يعمل كما هو مقصود، يمكنك تشغيل البرنامج النصي لمعالجة جميع المنشورات التي تحتوي على علامات [URL].
المراقبة والتحقق:
راقب مخرجات البرنامج النصي. لكل منشور تم تحديثه، سيتم طباعة id الخاص به في وحدة التحكم. بعد الانتهاء، تحقق من عدد قليل من المنشورات على الموقع للتأكد من ظهور التغييرات بشكل صحيح.
تذكير بالنسخ الاحتياطي:
قبل تشغيل البرنامج النصي، تأكد من أن لديك نسخة احتياطية كاملة لقاعدة البيانات، خاصة عند العمل مع التحديثات الجماعية.
إذا كانت لديك أسئلة إضافية أو واجهت مشكلات، فلا تتردد في طرحها!
وأنا أحب أنه يستخدم PostRevisor بحيث إذا حدث خطأ ما، سيكون لديك سجل للتعديل.
بالتأكيد تريد اختباره على عدد قليل من المنشورات قبل إطلاقه - وكذلك معرفة عدد المنشورات التي سيقوم بإصلاحها ومن سيحصل على إشعارات بشأن كل هذه المنشورات (هناك شيء مثل bypass_bump أو ما شابه ذلك يتخطى الإشعارات، على ما أعتقد).