مشكلة في صورة الشارة المفقودة

أهلاً،

لدي مشكلة في قسم الشارات (badges)، لقد قمت بتعديل بعض الشارات وإضافة بعض الصور إليها؛ بعد 6 أشهر قمت باستعادة نسخة احتياطية وكل شيء يعمل بشكل جيد باستثناء قسم الشارات؛ حاولت تسجيل الدخول في الوضع الآمن (safe-mode) وتعطيل جميع الإضافات (plugins)… لكن المشكلة لا تزال كما هي، كيف يمكنني استعادة أقسام الشارات بالأسماء والصور الافتراضية؟

يظهر الخطأ

Message (2 copies reported)

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
app/controllers/application_controller.rb:484:in `serialize_data'
app/controllers/badges_controller.rb:30:in `index'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

Env

HTTP HOSTS: site.com
إعجاب واحد (1)

هل تم استعادة الصور الأخرى بشكل صحيح؟

هل تأكدت من تضمين التحميلات في النسخة الاحتياطية؟

هل تستخدم S3 لتخزين التحميلات الخاصة بك؟ إذا لم يكن الأمر كذلك، هل يمكنك الدخول إلى الحاوية، والانتقال إلى /shared/uploads/default/original/1X هل لديك ملفات هناك؟

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

نعم، أنا لا أستخدم S3، وأنا دائماً أدرج صور المرفقات في النسخ الاحتياطي…
ما أبحث عنه الآن هو كيفية إعادة تعيين صور الشارات؟

بشكل افتراضي، لا توجد طريقة لـ “إعادة تعيين صور الشارات” على حد علمي.

ما سأفعله أولاً هو التحقق من أن الشارات التي تفتقد الصور قد تم استعادتها على الأقل. إذا قمت بفحص جدول badges، يمكنك الحصول على معرف الصورة في حقل image_upload. ثم استخدم هذا المعرف في جدول uploads للحصول على عنوان URL للصورة، كالتالي:

select url from uploads where id = <badge-upload-id>

يبدو عنوان URL شيئًا كهذا: /uploads/default/original/1X/c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg ومن هناك، يمكنك استخراج اسم الملف، وفي هذه الحالة سيكون c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

ثم يمكنك التحقق في الخادم من وجود الصورة باستخدام find أو أي طريقة أخرى تفضلها

cd /
find . -name c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

بمجرد التأكد من استعادة الصور، في المسار الصحيح، يمكنك متابعة تصحيح الأخطاء حيث أن المشكلة في مكان آخر.

هل إصدار Discourse من النسخة الاحتياطية مختلف جدًا عن إصدار Discourse الذي تقوم بالاستعادة إليه؟

ربما يعرف شخص آخر في المجتمع المزيد عن هذا الأمر.

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

ممتاز، ولكن كيف يمكنني معرفة عنوان URL للشارة المفقودة أو اسمها؟

لا يمكنني العثور على كيفية معرفة عنوان URL للصورة أو اسم الشارة المفقودة.

اتبع التعليمات هنا Discourse Data Explorer لتثبيت إضافة مستكشف البيانات، يمكنك استخدامها لفحص جدول الشارات. ركز على شاراتك المخصصة.

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

لقد قمت بتثبيته؛ لكنني لم أجد جدول الشارات؛

هذا هو الخطأ الذي أحصل عليه عند فتح ملف تعريف المسؤول؛

رسالة

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/users_controller.rb:92:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

تتبع

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

بيئة

HTTP HOSTS: site.com

مرحباً @f1r4s
لقد واجهت نفس المشكلة. هل تمكنت من حل هذه المشكلة؟

أعتقد أنه تم حل هذه المشكلة في هذا الموضوع:

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