root@xxxxx-app:/var/www/discourse# rake posts:missing_uploads
37 post uploads are missing.
34 uploads are missing.
5 of 34 are old scheme uploads.
33 of 1013268 posts are affected.
but after
root@xxxxx-app:/var/www/discourse# rake uploads:missing
.
.
.
/var/www/discourse/public/uploads/default/original/2X/3/3a9bf205dec2b6bd0b3cc35a3be1f69499960713.JPG
/var/www/discourse/public/uploads/default/original/3X/2/d/2db0ff326859b94824b64c4e0c2b156c562b7a99.jpg
/var/www/discourse/public/uploads/default/original/3X/e/f/ef271ac232c31e747206b47e4de7e0570de9e030.jpg
**10604** of 101083 uploads are missing
/var/www/discourse/public/uploads/default/optimized/2X/3/3d3efaa44fb43b99ec290b75e289080fc448f709_1_657x500.gif
/var/www/discourse/public/uploads/default/optimized/2X/4/4e3b01361d7c30c3df27a9606271175d91edff6d_1_200x200.jpeg
/var/www/discourse/public/uploads/default/optimized/2X/6/68fcd443312e7c500d25a6067c04c98aa1066686_1_200x200.JPG
/var/www/discourse/public/uploads/default/optimized/2X/1/16452ee2749e93e6b47d1388a20e34c1e3832ee1_1_100x100.jpg
/var/www/discourse/public/uploads/default/optimized/2X/0/0e843544885c0ee7a0c350d66bbe852dd4f0a497_1_135x135.jpeg
/var/www/discourse/public/uploads/default/optimized/2X/f/fb3d38e8d1b0e8ae25606156d37b8045f7cbc2b3_1_200x200.jpg
/var/www/discourse/public/uploads/default/optimized/2X/5/54a076f5be7cfabcf0fa34e57b836d85a33a879e_1_200x200.jpg
7 of 247116 optimized_images are missing
I’m having this problem as well on a forum running v2.3.0.beta9. I haven’t restored from backups. It’d be good to know why it’s happening and what we can do to restore the missing uploads. The good news is that the missing uploads seem to be in the tombstone, so hope isn’t lost..
So far, I’ve rebuilt the app and run rake uploads:missing, but that hasn’t helped.
root@forum-app:/var/www/discourse# rake posts:missing_uploads
Looking for missing uploads on: default
146 post uploads are missing.
142 uploads are missing.
81 of 58082 posts are affected.
root@site:~# cd /var/discourse/
root@site:/var/discourse# ./launcher enter app
root@site-app:/var/www/discourse# rails c
[1] pry(main)> SiteSetting.migrate_to_new_scheme = true
How will I know that this command has been successful? Should I try running rake posts:missing_uploads again after enabling this hidden site setting in the Rails console? Or maybe PostCustomField.where(name: Post::MISSING_UPLOADS)?
سيتم تنفيذه وهجرة البيانات في مهمة خلفية. بعد الانتهاء، ستعود قيمة إعداد الموقع SiteSetting.migrate_to_new_scheme إلى false. ثم قم بتشغيل مهمة rake posts:missing_uploads مرة أخرى.
حسناً، لقد اتبعت نصيبتك للتو ويبدو أن المخرجات واعدة. أولاً، قمت بالدخول إلى حاوية Discourse:
$ cd /var/discourse
$ sudo ./launcher enter app
WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed
Please be patient
Unable to find image 'discourse/base:2.0.20190625-0946' locally
2.0.20190625-0946: Pulling from discourse/base
Digest: sha256:9899c60721649460283ac800836ac1ebecbc3ed8a97a496e514cf8c97f5b6d82
Status: Downloaded newer image for discourse/base:2.0.20190625-0946
بعد ذلك، شغّلت الأمر rake posts:missing_uploads:
# rake posts:missing_uploads
Looking for missing uploads on: default
Fixing missing uploads:
.........................................................................................................................................................................................................................................................
12 post uploads are missing.
12 uploads are missing.
1 of 12 are old scheme uploads.
3 of 8930 posts are affected.
(فقط 12 مرفقًا مفقودًا هذه المرة! رائع!)
أخيرًا، قمت بتعيين SiteSetting.migrate_to_new_scheme إلى true ثم خرجت من وحدة تحكم Rails:
بعد مرور بعض الوقت، تأكدت من أن قيمة SiteSetting.migrate_to_new_scheme قد تغيرت بالفعل إلى false، ثم شغّلت rake posts:missing_uploads مرة أخرى:
[1] pry(main)> SiteSetting.migrate_to_new_scheme
=> false
[2] pry(main)> exit
# rake posts:missing_uploads
Looking for missing uploads on: default
Fixing missing uploads:
.
12 post uploads are missing.
12 uploads are missing.
1 of 12 are old scheme uploads.
3 of 8939 posts are affected.
المخرجات متشابهة إلى حد كبير، لذا أعتقد أن هذا يعني أن جميع المنشورات التي تستخدم نظام الرفع القديم قد تم ترحيلها إلى نظام الرفع الجديد. ومع ذلك، لا يزال مجلد uploads يحتوي على العديد من المجلدات الفرعية المرقمة:
هذا المخرجات طويل بلا حدود، ولا أرى طريقة سهلة لتوجيهه إلى ملف للمعالجة. (أفضل ما يمكنني فعله هو الضغط على زر المسافة للانتقال إلى صفحة في كل مرة… ولم أرَ النهاية بعد).
كيف يمكننا الحصول على هذا المخرجات في ملف، أو ربما جعله يتخطى جسم الرسالة/المرفقات؟
حسناً، وجدنا حلاً يتجاوز إظهار الأعمدة الثلاثة “الأكثر إشكالية”:
"raw", "cooked", "raw_email
posts = Post.where("cooked LIKE '%/uploads/default/%' AND cooked NOT LIKE '%/uploads/default/original/%' AND cooked NOT LIKE '%/uploads/default/optimized/%'"); 42
CSV.open("/tmp/posts-to-review.csv", "wb") do |csv|
csv << Post.attribute_names - ["raw", "cooked", "raw_email"]
posts.each do |post|
csv << post.attributes.except("raw", "cooked", "raw_email").values
end
end
لتجنب طباعة المخرجات، اكتب q،
أخرج من بيئة Ruby عبر exit
امسح الشاشة، ثم استخدم الأمر cat /tmp/posts-to-review.csv
أعتقد أنني كان بإمكاني توجيه المخرجات إلى المجلد المشترك… لكن هذا الحل يعمل.
ممم… لقد تحققت للتو (باستخدام find . -maxdepth 1 -type d -empty | wc -l) ووجدت فقط 19 دليلًا فارغًا مرقمًا من أصل 262 دليلًا إجماليًا (باستخدام find . -maxdepth 1 -type d -iname '[0-9]*' | wc -l)، أي حوالي 7%. لذا لا أعتقد أنه يجب عليّ تجاهلها بالكامل؟
رائع، شكرًا لك!
لاحظت أن هذا يستخدم سمة “cooked” — ويُفترض أن هذا يعني أن مصدر Markdown قد يستمر في استخدام مخطط التحميل القديم؟ على سبيل المثال، وجدت منشورًا يحتوي على وسم الصورة التالي في المصدر:
هل يجب أن نقلق من أن عناوين URL للصور في مصدر Markdown لا تطابق عناوين URL للصور في HTML المعالج (بما في ذلك تجزئات الملفات)؟ على سبيل المثال، هل يمكنني حذف دليل /var/discourse/shared/standalone/uploads/default/293 بأمان دون القلق من كسر الرابط إلى الصورة أعلاه؟ أو بصيغة أخرى، هل سيعرف Discourse دائمًا أن /uploads/default/293/8d45810f8911c08c.jpg هو بديل لـ /uploads/default/original/2X/0/0d1e04b9215f210faf1d8509e6bede9c3319e02b.jpeg، وهل سيتم الاحتفاظ بهذا التعيين عند استعادة الموقع من نسخة احتياطية؟