لقد واجهتُ مشكلات أثناء محاولة استعادة نسخة من بيئة Staging الخاصة بـ Discourse. تعمل بيئة Staging على الإصدار v2.4.0.beta1 +36. هل لديك أي فكرة عن مكان حدوث الخلل أو أين يجب البحث؟ شكرًا مقدّمًا!
فيما يلي نهاية سجل المخرجات:
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] جاري ترحيل قاعدة البيانات...
[2019-07-16 20:08:16] جاري إعادة الاتصال بقاعدة البيانات...
[2019-07-16 20:08:16] جاري إعادة تحميل إعدادات الموقع...
[2019-07-16 20:08:16] جاري تعطيل البريد الصادر للمستخدمين غير الموظفين...
[2019-07-16 20:08:16] جاري مسح ذاكرة التخزين المؤقت للإيموجي...
[2019-07-16 20:08:16] جاري تعطيل وضع القراءة فقط...
[2019-07-16 20:08:16] مسح ذاكرة التخزين المؤقت للموضوعات
[2019-07-16 20:08:22] جاري استخراج الملفات المرفقة...
[2019-07-16 20:08:40] جاري ترحيل الملفات المرفقة إلى S3...
[2019-07-16 20:08:46] تم إلغاء عملية الاستعادة!
[2019-07-16 20:08:46] جاري محاولة التراجع...
[2019-07-16 20:08:46] جاري التراجع...
[2019-07-16 20:08:47] جاري تنظيف العناصر...
[2019-07-16 20:08:47] جاري إزالة الدليل المؤقت '/var/www/discourse/tmp/restores/default/2019-07-16-200516'...
[2019-07-16 20:08:48] جاري إلغاء إيقاف sidekiq مؤقتًا...
[2019-07-16 20:08:48] جاري تحديد حالة الاستعادة على أنها منتهية...
فيما يلي المخرجات بعد تشغيل أمر discourse restore BACKUP_FILENAME من سطر الأوامر. أي ملاحظات موضع ترحيب، شكرًا لكم!
تعطيل البريد الصادر للمستخدمين غير الموظفين...
مسح ذاكرة التخزين المؤقت للرموز التعبيرية...
تعطيل وضع القراءة فقط...
مسح ذاكرة التخزين المؤقت للمظهر
استخراج الملفات المرفقة...
ترحيل الملفات المرفقة إلى S3...
التحقق مما إذا كان الافتراضي قد تم ترحيله بالفعل...
لم يتم ترحيل 524 من أصل 9474 ملفًا مرفقًا إلى S3. فشل ترحيل S3 لقاعدة البيانات 'default'.
لم يتم إعادة تعيين 321 منشورًا إلى عنوان URL الجديد للمرفق على S3. فشل ترحيل S3 لقاعدة البيانات 'default'.
البحث عن الملفات المرفقة المفقودة في: default
إصلاح الملفات المرفقة المفقودة:
..........................................................................................................
يوجد 116 ملفًا مرفقًا للمنشورات مفقود.
يوجد 116 ملفًا مرفقًا مفقود.
106 من أصل 116 هي مرفقات من المخطط القديم.
تأثر 98 من أصل 83342 منشورًا.
حدد أمر rake posts:missing_uploads 98 مشكلة. فشل ترحيل S3 لقاعدة البيانات 'default'.
لا توجد منشورات تتطلب إعادة بناء
جاري ترحيل الملفات المرفقة إلى S3 لـ 'default'...
لم يتم ترحيل بعض الملفات المرفقة إلى المخطط الجديد. يرجى تشغيل هذه الأوامر في وحدة تحكم rails
SiteSetting.migrate_to_new_scheme = true
Jobs::MigrateUploadScheme.new.execute(nil)
تم إلغاء عملية الاستعادة!
جاري محاولة التراجع...
جاري التراجع...
تنظيف الأمور...
إزالة المجلد المؤقت '/var/www/discourse/tmp/restores/default/2019-07-22-172918'...
إلغاء إيقاف Sidekiq...
وضع علامة على اكتمال الاستعادة...
إشعار 'النظام' بنهاية الاستعادة...
انتهى!
[فشل]
اكتملت عملية الاستعادة.
أنا متأكد تقريبًا من أنني تعرضت لهذه المشكلة أيضًا، وأعتقد أنه يجب تصنيفها كخطأ.
(إذا كانت مختلفة، فلا تتردد في نقلها إلى موضوع جديد منفصل)
من المهم جدًا أن يعمل استعادة النسخ الاحتياطية.
لاحظ أن سبب الفشل ليس واضحًا عند استخدام واجهة المستخدم الخاصة بالمسؤول والنقر على استعادة بجوار اسم النسخة الاحتياطية، ستحصل على:
...
جاري نقل التحميلات إلى S3...
تم إلغاء عملية الاستعادة!
...
إكمال الاستعادة عبر سطر الأوامر يمنحك تفاصيل أكثر:
discourse enter app
discourse restore example-net-2020-01-02-033557-v20191219112000.tar.gz
...
إعادة الاتصال بقاعدة البيانات...
إعادة تحميل إعدادات الموقع...
تعطيل البريد الصادر للمستخدمين غير الموظفين...
مسح ذاكرة التخزين المؤقت للرموز التعبيرية...
تعطيل وضع القراءة فقط...
مسح ذاكرة التخزين المؤقت للمظهر...
استخراج التحميلات...
إعادة تعيين خرائط التحميلات...
إعادة تعيين خرائط '//forum-example-net.s3.dualstack.eu-west-2.amazonaws.com/' إلى '/uploads/default/'
optimized_images=3
uploads=1
جاري نقل التحميلات إلى S3...
التحقق مما إذا كانت النسخة الافتراضية قد تم نقلها بالفعل...
6 من أصل 12 تحميلًا لم يتم نقلها إلى S3. فشل نقل S3 لقاعدة البيانات 'default'.
1 منشور لم يتم إعادة تعيين خرائطه إلى عنوان URL جديد للتحميل على S3. فشل نقل S3 لقاعدة البيانات 'default'.
البحث عن التحميلات المفقودة على: default
لا توجد تحميلات منشورات مفقودة.
يرجى توفير متغيرات البيئة التالية:
- DISCOURSE_S3_BUCKET
- DISCOURSE_S3_REGION
وأي واحد مما يلي:
- DISCOURSE_S3_ACCESS_KEY_ID
- DISCOURSE_S3_SECRET_ACCESS_KEY
أو
- DISCOURSE_S3_USE_IAM_PROFILE
تم إلغاء عملية الاستعادة!
محاولة التراجع...
جاري التراجع...
تنظيف الأشياء...
إسقاط الدالة من مخطط discourse_functions
إزالة المجلد المؤقت '/var/www/discourse/tmp/restores/default/2020-01-06-222212'...
إلغاء إيقاف sidekiq...
تحديد الاستعادة على أنها منتهية...
إشعار 'النظام' بنهاية الاستعادة...
تم!
[فشل]
تمت الاستعادة.
أضفت كود تصحيح أخطاء بسيط إلى uploads.rake مباشرة قبل عبارة “يرجى توفير متغيرات البيئة التالية” لتفريغ متغيرات البيئة:
puts "ENV: " + ENV.inspect
لم يكن ENV يحتوي على أي متغيرات DISCOURSE_S3_* مضبوطة.
هل هناك سبب منطقي لعدم سحب هذه البيانات من الإعدادات؟
بالتأكيد، لكن هذا لا يفيد عندما يكون النسخ الاحتياطي الذي تملكه يتضمن الملفات المرفوعة.
وللتوضيح - ليس أمرًا بالغ الأهمية بالنسبة لي في الوقت الحالي، إذ يمكنني التعليق على الأسطر المشكلة وإكمال عملية الاستعادة، لكن الآخرين لا يستطيعون ذلك.
لا حاجة لتحويل هذا إلى bug. الأمر على عاتقي وقد قضيت بالفعل وقتًا طويلاً في إعادة هيكلة عملية الاستعادة، وإضافة العديد من الاختبارات، وجعلها أكثر موثوقية. سأقوم بإجراء بعض التعديلات الإضافية لجعل الاستعادة إلى S3 أقل عرضة للتوقف ولإظهار المزيد من المعلومات في واجهة المستخدم للمسؤول.
حسب علمي، تم إعادة هيكلة عملية النسخ الاحتياطي/الاستعادة، لكنني اكتشفت للتو أن هذه المشكلة لا تزال قائمة.
فشل محاولة استعادة نسخة احتياطية في الإصدار التجريبي beta11 كانت قد فعّلت خيار enable s3 uploads، مع ظهور الرسالة التالية:
[2020-02-18 09:51:38] جاري استعادة الملفات المرفوعة، قد يستغرق هذا بعض الوقت...
[2020-02-18 09:51:38] EXCEPTION: يرجى توفير متغيرات البيئة التالية:
- DISCOURSE_S3_BUCKET
- DISCOURSE_S3_REGION
وإما:
- DISCOURSE_S3_ACCESS_KEY_ID
- DISCOURSE_S3_SECRET_ACCESS_KEY
أو:
- DISCOURSE_S3_USE_IAM_PROFILE
[2020-02-18 09:51:38] /var/www/discourse/lib/file_store/to_s3_migration.rb:34:in `s3_options_from_env'
توجد بيانات اعتماد الوصول إلى S3 في قاعدة البيانات المستعادة، لذا لا داعي لطلب وجودها في متغير بيئة أيضًا.
تقديم متغيرات البيئة يؤدي إلى فشل أيضًا:
جاري استعادة التحميلات، قد يستغرق هذا بعض الوقت...
جاري التحقق مما إذا كانت db8015 قد هُجرت بالفعل...
200 من أصل 206 تحميل لم تُهجّر إلى S3. فشلت هجرة S3 لقاعدة البيانات 'db8015'.
5 مشاركات لم تُعاد تعيينها إلى عنوان URL جديد للتحميل في S3. فشلت هجرة S3 لقاعدة البيانات 'db8015'.
لا توجد مشاركات تتطلب إعادة خَبْز.
جاري هجرة التحميلات إلى S3 لـ 'db8015'...
جاري رفع الملفات إلى S3...
- جاري سرد الملفات المحلية
=> 21 ملفًا
- جاري سرد ملفات S3
. => 16 ملفًا
- جاري مزامنة الملفات مع S3
.....................
جاري تحديث الروابط في قاعدة البيانات...
جاري إزالة الصور المحسّنة القديمة...
جاري وضع علامة على جميع المشاركات التي تحتوي على صناديق عرض خفيفة لإعادة خَبْزها...
تم وضع علامة على 5 مشاركات لإعادة الخَبْز.
استثناء: 183 من أصل 206 تحميل لم تُهجّر إلى S3. فشلت هجرة S3 لقاعدة البيانات 'db8015'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:127:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:74:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:350:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:61:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:203:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:48:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:30:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:58:in `run'
script/discourse:143:in `restore'
لا أعرف سبب هذا الفشل.
كانت معظم التحميلات موجودة بالفعل على S3، لذا فإن عبارة “200 من أصل 206 تحميل لم تُهجّر إلى S3” و"183 من أصل 206 تحميل لم تُهجّر إلى S3" غير صحيحة. عدد الملفات المحلية البالغ 21 ملفًا صحيح، وهناك حوالي 200 تحميل على S3 (قد يكون 206 أيضًا). لا أعرف أيًا من الأرقام الأخرى (183، 16).
لا أعرف أيضًا لماذا يحاول عملية الاستعادة نقل المزيد من التحميلات إلى S3؟ ألا يجب أن تأخذ الصور المحلية من النسخة الاحتياطية وتترك التحميلات الموجودة على S3 كما هي؟ أم أنني أغفل شيئًا؟
في النهاية، انتهيت بتعديل إعداد enable_s3_uploads في نسخة قاعدة البيانات إلى false، لكن هذا أدى إلى إعادة تعيين كل شيء إلى المحلية. وبما أن هناك بعض الصور لا تزال محلية، فقد تطلب الأمر جهدًا كبيرًا لتحديد أي منها يحتاج إلى إعادة تعيين إلى S3 وأيها لا يجب.
لا يتم دعم دمج التحميلات المحلية مع التحميلات المخزنة على S3. نعم، أعلم أنه من الممكن الوقوع في مثل هذه الحالة عندما ينتقل شخص ما من التحميلات المحلية إلى S3 ولا يرحّل التحميلات الحالية إلى S3، لكن هذه قصة أخرى…
يتضمن استعادة نسخة احتياطية دائمًا إعادة تعيين الروابط إذا اكتشف النظام أي تغييرات تؤثر على عناوين URL الخاصة بالتحميل. ويشمل ذلك التبديل بين وضع الموقع المستقل ووضع الموقع متعدد المواقع، والتبديل بين التحميلات المحلية وS3، بالإضافة إلى التغييرات في إعدادات S3 وCDN. يتم استعادة جميع التحميلات في الموقع الصحيح بناءً على الإعدادات، سواء محليًا أو على S3.
من وقت لآخر، نواجه نسخًا احتياطية يفشل فيها إعادة تعيين الروابط تلقائيًا والهجرة إلى S3 لأسباب مختلفة. يمكنك توقع رؤية المزيد من التحسينات في بداية دورة تطوير الإصدار 2.5.