فشل Migrate_to_s3 بسبب صور الشعار

أقوم بنقل موقع موجود من تخزين التحميلات محليًا إلى تخزينها في S3، باتباع هذا الدليل. كل شيء يعمل بشكل جيد للتحميلات الجديدة، وقد تأكدت من أنها تظهر في S3 عن طريق التحقق يدويًا. ومع ذلك، عندما أحاول تشغيل rake uploads:migrate_to_s3، أحصل على المخرجات التالية:

يرجى ملاحظة أن الترحيل إلى S3 غير قابل للعكس حاليًا!
[CTRL+c] للإلغاء، [ENTER] للمتابعة

ترحيل التحميلات إلى S3 لـ 'default'...
لم يتم ترحيل بعض التحميلات إلى المخطط الجديد. تشغيل الترحيل، قد يستغرق هذا بعض الوقت...
تم إلغاء rake!
FileStore::ToS3MigrationError: لم يكن من الممكن ترحيل بعض التحميلات إلى المخطط الجديد. تحتاج إلى إصلاح هذا يدويًا.
/var/www/discourse/lib/file_store/to_s3_migration.rb:162:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:127:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(انظر التتبع الكامل عن طريق تشغيل المهمة مع --trace)

بالنظر إلى الملف الذي ينشأ منه الخطأ، lib/file_store/to_s3_migration.rb، أرى أنه يبدو أنه يقوم بإجراء فحص على جدول uploads للصفوف حيث url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'. في حالتي، أفترض أن seeded_image_url يتم حله إلى uploads/default/original/_X/.

لقد قمت بتشغيل نفس الفحص على قاعدة البيانات يدويًا، ووجدت ما يلي:


لا أقلق بشأن الاثنين السفليين، أفترض أن هذه مجرد آثار عرضية للتبديل - إذا لم يكن لديهم url، فمن المفترض أن الموقع لا يعرف مكان العثور عليها، لذا يمكن إزالتها بأمان. أنا أكثر قلقًا بشأن الشعارات، مع ذلك. هذه هي الشعارات الافتراضية، والتي لا نزال نستخدمها بالفعل، ولكنها موزعة مع قاعدة الكود بدلاً من تحميلها.

هل من الآمن إضافة شرط ثالث في to_s3_migration.rb، السطر 146، يتجاهل أيضًا التحميلات حيث يبدأ عمود URL بـ /images/؟ أم يجب عليّ فقط حذف تلك الصفوف لأن تلك الملفات تتم معالجتها بشكل منفصل عن التحميلات الآن، وهذا مجرد أثر من إصدار أقدم من Discourse؟ أم أنني أسأت فهم ما تفعله المهمة (لست على دراية كبيرة بـ Rails) والمشكلة شيء آخر؟

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

عدت في اليوم التالي وحاولت مرة أخرى، وعملت مهمة الترحيل بشكل جيد. أعتقد أن صور الشعار لم تكن المشكلة أبدًا، وكانت مجرد تلك الصورتين الإضافيتين. يُفترض أنه تم تنظيفها بواسطة نوع من المهام الدورية، لأنه عندما أنظر الآن فقد اختفت.

في الختام، تتحقق مهمة التحميل من عناوين URL غير صالحة للتحميل باستخدام:

Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'").exists?

من المحتمل أن يكون by_users هو السبب في تجاهل صور الشعار، نظرًا لعدم وجود user_id صالح لها.

3 إعجابات