لا يمكن إنشاء صور رمزية للمستخدم عند الانتقال إلى خادم جديد لأن الامتداد "غير معروف"

تعديل: أعيد تصنيف هذه المشكلة على أنها خطأ، حتى يتمكن شخص يفهمها أفضل مني من الاطلاع عليها.

كانت هناك مجموعة من الملفات المرفقة تحمل الامتداد “unknown”. وهذا يعني أنه من المستحيل إنشاء صور مصغرة. أعتقد أن هذا حدث عند نقل نسخة احتياطية إلى موقع جديد ثم الحاجة إلى إعادة إنشاء الصور المصغرة.

أعتقد أنه عند محاولة إنشاء الصور المصغرة وكان الامتداد ‘unknown’، يجب استبدال الامتداد، شيء مثل:

 upload.extension = upload.original_filename.split('.').last

يبدو أنه لو تم ذلك في مكان ما، لما قضيت 4 ساعات في هذا الأمر.

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

تليها التفاصيل الدقيقة.

نقلت الموقع من /community إلى community.example.com عن طريق عمل نسخة احتياطية واستعادتها. أصلحت الملفات المرفقة باستخدام الأمر:

 RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'

لكن الصور الرمزية لا تزال تظهر كـ “Gray Man”.

عندما أنظر إلى user.user_avatar.custom_upload.url وألصق هذا الرابط في المتصفح، أحصل على الصورة الرمزية المطلوبة. يبدو أنني بحاجة إلى “إعادة خبز” المستخدمين.

ظننت أن الأمر التالي قد يحل المشكلة:

rake avatars:refresh

أو

rake avatars:clean 

لكن دون جدوى.

ما الذي فاتني؟

إعجاب واحد (1)

في Sidekiq، يوجد مشغّل لإنشاء الصور الرمزية المفقودة.

قد يستغرق الأمر بعض الوقت، لكن ذلك يجب أن يساعد إذا لم أكن مخطئًا.

إعجابَين (2)

جميل! هذا يستدعي User.refresh_avatar، ولكن للأسف

  user=User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

أيضًا لا يحل هذه المشكلة.

إعجابَين (2)

إليك تلميح:

ActionController::RoutingError (لا توجد مسار يطابق [GET] "/user_avatar/community.example.com/broken_user")
إعجاب واحد (1)

هل يتم التحديث عند تسجيل دخول المستخدم إلى حسابه؟

لا أعتقد ذلك.

user.user_avatar.custom_upload يحتوي على الرابط الصحيح، لكن https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png يعرض صورة الملف الشخصي المفقودة. أحتاج إلى إيجاد طريقة لإعادة بناء هذه الصور المصغرة للملفات الشخصية.

هناك force_avatar_update في تسجيل دخول المستخدم رأيتها في الكود.

قد يكون هذا مفيدًا للغاية، يبدو وكأنه مهمة

يبدو أن هناك خطأ:

user=User.find_by_username('Tuomo')
upload_id=user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
      Discourse.avatar_sizes.each do |size|
        OptimizedImage.create_for(upload, size, size)
      end
OptimizedImage.where(upload_id: upload_id)

وحصلت على عدم وجود صور محسّنة.

broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
  upload.extension = upload.original_filename.split('.').last
  upload.save
end

يُصلح ذلك.

ثم أحتاج فقط إلى إنشاء صور مصغّرة جديدة، هكذا:


has_upload = UserAvatar.where("custom_upload_id > 0")

has_upload.each do |user_avatar|
  Jobs.enqueue(:create_avatar_thumbnails,{upload_id: user_avatar.custom_upload_id})
end
إعجابَين (2)

أعتقد أن هذه علة شرعية وأحبها جيف، لكنها لم تحظ بأي اهتمام إضافي.

هل أنا مجنون أم أن هناك شيئًا معطلاً هنا؟

إعجابَين (2)

لقد نقلت موقعًا من /community إلى community.example.com عن طريق إجراء نسخ احتياطي واستعادة.

أعتقد أننا لم نصادف هذا مع أي من عمليات الاستعادة لدينا، لأن ما تشتكي منه هنا هي آثار للنسخ الاحتياطي والاستعادة، أليس كذلك؟ ربما خاصة بهذه النسخة الاحتياطية والاستعادة؟

إعجاب واحد (1)