إذًا، هذا هو وضعي الحالي:
بعد محاولة تشغيل post.rebake!(invalidate_broken_images: true) على جميع منشوراتي البالغ عددها 40000 والتي تحتوي على السلسلة النصية [img]، نجحت مع العديد من الصور… ولكنها لم تنجح مع الكثير منها، على الرغم من أنها مستضافة على نفس خدمة استضافة الصور الخارجية.
على سبيل المثال، لدي آلاف روابط “casimages” التي تعمل (وتربط بصور صالحة، وتعرض الصور في معاينة المحرر عند التعديل)، وهي معطلة في النسخة المطهوة من المنشورات، والتي تم عرضها وتحميلها بشكل صحيح على الخادم بفضل برنامجي النصي، ولكن لدي أيضًا الكثير من الروابط الأخرى التي لم تنجح ببساطة، ولا أعرف السبب.
Post.where('raw LIKE ?', '%[img]%').find_each do |p|
p.rebake!(invalidate_broken_images: true)
end
لدي أيضًا روابط صور من خدمات استضافة صور أخرى تم تحميلها، وبعضها لم ينجح.
فشلت في رؤية أي فرق بين هذه المنشورات وروابط الصور. كلها كانت تحتوي على صور عاملة، وحقيقة أنها استخدمت نفس خدمة استضافة الصور أربكتني.
حاولت العملية عدة مرات وكانت النتائج غير متسقة، بغض النظر عن خدمات الاستضافة الخارجية… تم تحميل بعض الصور، ولم يتم تحميل البعض الآخر. بدا الأمر عشوائيًا.
يذكرني هذا قليلاً بالمشكلة التي واجهها @Amethi: Some linked images not displaying/show as broken - #8 by Amethi حيث نجحت مع بعض الصور فقط دون أي تفسير.
سأتحدث فقط عن casimages هنا على الرغم من أن منتدى الاستيراد الخاص بي استخدم خدمات استضافة صور أخرى متنوعة.
لذلك، اعتقدت أنه ربما قامت casimages بحظر عنوان IP الخاص بي مؤقتًا إذا حاولت استرداد عدد كبير جدًا من الصور من خوادمها. يمكن أن يفسر ذلك حقيقة أنها لم تنجح مع جميع الصور والعشوائية في نجاح تحميل الصور من خادمي.
كانت هناك حتى حالات نجحت فيها خيار إعادة بناء HTML - في البداية فقط - وتم عرض الصور بعد ذلك بدلاً من إظهار أيقونة صورة مكسورة، على الرغم من أنها كانت لا تزال مستضافة على خدمة الاستضافة الخارجية الخاصة بها، ولكن عندما تم تشغيل مهمة Sidekiq لسحب الصور الخارجية، أدت إلى كسر الصور.
نفس الشيء عند استخدام برامج نصية بلغة Rails مع rebake!(invalidate_broken_images: true)
![]()
لذلك، أنا حاليًا أجرب نهجًا أبطأ، حيث أنتظر 5 ثوانٍ بين كل أمر rebake! في Rails:
total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
p.rebake!(invalidate_broken_images: true)
print "#{i}/#{total}"
print "\r"
i +=1
sleep(5)
end
سأرى بعد حوالي 60 ساعة ما إذا كان الوضع قد تحسن…
أود أن أفهم أساسيات مشكلتي هنا ولماذا لا يمكن لـ “rebake” العادي تحميل صورة على الخادم (إذا لم يتم حظري مؤقتًا بواسطة casimages).
لاحظ أن هذه المرة، شهادة خادم casimages تبدو جيدة![]()
أنا أيضًا لا أفهم حقًا ما تفعله invalidate_broken_images. أنا لست على دراية كبيرة بكود Discourse.
نظرت إلى الكود لرؤية تكرار invalidage_broken_images ورأيت هذه الملفات:
لماذا يبحث تحديدًا عن السلسلة النصية <img>؟ منشوراتي مستوردة من phpBB والإصدار الخام يحتوي فقط على [img] bbCode، وليس علامات <img>؛ فكيف سيكون له تأثير (وقد كان، انظر رسالتي السابقة) على منشوراتي؟ ![]()
أنا أيضًا لا أفهم حقًا الفرق بين هذين الأسلوبين (؟):
يبدو أنه يخبر أن rebake يضبط الوسائط الافتراضية على false، وأن rebake! يضبط الوسيط الافتراضي على true.
كيف يرتبط هذان (أنا على دراية بمعنى علامة ! في Ruby بالمناسبة)، ولماذا هما في ملفات مختلفة؟
هدفي هو فقط فهم سبب تحميل صوري الخارجية أحيانًا، وأحيانًا لا، وما إذا كان بإمكاني العثور على طريقة موثوقة لتحميلها بشكل صحيح وتلقائي، حتى لو كان ذلك يعني تحميل صورة كل ساعة. ![]()
لقد أمضيت ما يقرب من أسبوعين في هذا الأمر وهو يدفعني (والأشخاص الذين قمت بترحيل خادمهم لهم) إلى الجنون. ![]()
أيضًا، لا يوجد شيء في سجلات Discourse، بخلاف رسائل متعددة تفيد بأن Sidekiq يستهلك الكثير من الذاكرة (يستخدم: 592.25M). لاحظ أنني أعمل على Ubuntu عبر WSL على Windows 10، ولكنني أنوي استخدام حل فعال (إذا وجدت واحدًا…) على خادمنا الافتراضي.