استعادة إلى مضيف جديد

لقد قمت بإعداد مضيف جديد حتى أتمكن من الحصول على بيئة “مرحلية”. لقد أعدت إنشاء نفس تثبيت Discourse بنفس الإصدار على الأرجح. أنا أستخدم الإصدار: 2.8.2.

التعليق الأول، اعتبارًا من الإصدار 2.8.2، انخفض حجم النسخ الاحتياطي الخاص بي من 282 ميجابايت إلى حوالي 90 ميجابايت. لست متأكدًا من السبب، لكنني سأستمر في الاستفادة من بعض الذكاء المضاف.

لقد قمت بتنزيل أحدث أرشيف من منتدى الخاص بي، وقمت بتحميله إلى التخزين المحلي على بيئة المرحلة الجديدة.

يفشل الاستعادة بسبب:

[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ترحيل قاعدة البيانات...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] إعادة الاتصال بقاعدة البيانات...
[2022-02-27 19:43:00] إعادة تحميل إعدادات الموقع...
[2022-02-27 19:43:00] تعطيل رسائل البريد الإلكتروني الصادرة للمستخدمين غير الموظفين...
[2022-02-27 19:43:02] تعطيل وضع القراءة فقط...
[2022-02-27 19:43:02] مسح ذاكرة التخزين المؤقت للفئات...
[2022-02-27 19:43:02] إعادة تحميل الترجمات...
[2022-02-27 19:43:02] إعادة تعيين التحميلات...
[2022-02-27 19:43:02] إعادة تعيين 'https://forum.geekbeacon.org' إلى 'https://forum-staging.geekbeacon.org'
[2022-02-27 19:43:08] استعادة التحميلات، قد يستغرق هذا بعض الوقت...
[2022-02-27 19:43:36] استثناء: لم تتم إعادة تعيين 8 مشاركات إلى عنوان URL جديد للتحميل من S3. فشل ترحيل S3 لقاعدة البيانات 'default'.
[2022-02-27 19:43:36] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:317:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:62:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:44:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:23:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:36:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2022-02-27 19:43:36] محاولة التراجع...
[2022-02-27 19:43:36] التراجع...
[2022-02-27 19:43:36] تنظيف الأشياء...
[2022-02-27 19:43:36] إسقاط الوظائف من مخطط discourse_functions...
[2022-02-27 19:43:36] إزالة الدليل المؤقت '/var/www/discourse/tmp/restores/default/2022-02-27-194051'...
[2022-02-27 19:43:36] إلغاء إيقاف sidekiq مؤقتًا...
[2022-02-27 19:43:36] وضع علامة على الاستعادة على أنها مكتملة...
[2022-02-27 19:43:36] إخطار 'csgeek' بنهاية الاستعادة...

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

هذه هي مشكلتك. ربما استخدم نفس S3 bucket واستخدم نفس الـ bucket؟ ربما تأكد من أن الإعداد المخفي الذي يسمى شيئًا مثل “download S3 in backup” قيد التشغيل. ستحتاج إلى البحث أو النظر في المصدر عن اسم الإعداد.

أو ربما تحتاج إلى التأكد من أن بقية تحميلاتك على موقع الإنتاج موجودة على S3.

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

ليس لدي S3 مهيأ، وأفترض أن الخادم القديم قد يحتوي على بعض البيانات القديمة التي لم يتم تعيينها إلى موقع S3 صالح.

عدت إلى الخادم الأقدم ولدي دلوين مهيأين، أحدهما للنسخ الاحتياطي والآخر للوسائط. اتبعت الدليل وقمت بإعداد AWS S3 بما في ذلك CDN.

عندما أقوم بتشغيل rake uploads:migrate_to_s3 والتي فشلت، اتبعتها بـ posts:rebake ويبدو أن ذلك قلل من عدد الأخطاء، لكنه لا يزال يفشل:

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

ترحيل التحميلات إلى S3 لـ 'default'...
تحميل الملفات إلى S3...
 - سرد الملفات المحلية
 => 208 ملفات
 - سرد ملفات S3
. => 978 ملفات
 - مزامنة الملفات إلى S3
................................................................................................................................................................................................................
تحديث عناوين URL في قاعدة البيانات...
إزالة الصور المحسّنة القديمة...
وضع علامة على جميع المشاركات التي تحتوي على مربعات إضاءة لإعادة الخبز...
تم وضع علامة على 15 مشاركة لإعادة الخبز
فشل rake!
FileStore::ToS3MigrationError: لم تتم إعادة تعيين منشور واحد إلى عنوان URL تحميل S3 الجديد. فشل ترحيل S3 لقاعدة البيانات 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
المهام: TOP => uploads:migrate_to_s3
(انظر التتبع الكامل عن طريق تشغيل المهمة مع --trace)

هل هناك طريقة لتشغيل migrate_to_s3 في وضع مطول لتحديد المنشور الذي يسبب المشكلة؟

لدي نفس المشكلة، ترحيل الخادم الخاص بي دون تغيير دلو S3.
أي اقتراح؟

هل تفشل عملية الاستعادة لديك مع خطأ كهذا؟

FileStore::ToS3MigrationError: 1 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.

في هذه الحالة، فإن أفضل شيء تفعله هو إصلاح المنشور (المنشورات) التي تحتوي على ملفات مرفوعة في المكان الخاطئ. ولكن أعتقد أن هناك حالة يمكن أن يكون فيها هذا الاختبار إيجابيًا بشكل خاطئ. في هذه الحالة، يمكنك استخدام مفتاح تبديل (switch) في مهمة الـ rake (rake task) التي ستجعله يتوقف مؤقتًا حتى تتمكن من إصلاح الأمور. لا يمكنني العثور عليه بسرعة، وهو ليس موجودًا في Backup discourse from the command line حيث ينبغي أن يكون. أنا في خضم مهمة، لذلك لا يمكنني العثور عليه الآن.

نعم، لدي هذا النوع من الأخطاء

EXCEPTION: 3 مشاركات لم تتم إعادة تعيينها إلى عنوان URL جديد للتحميل على S3. فشلت ترحيل S3 لقاعدة البيانات ‘default’

يمكنك المحاولة

discourse restore --pause filename

سيؤدي ذلك إلى إيقاف الاستعادة مؤقتًا ويمكنك العبث بقاعدة البيانات في طرفية أخرى لإصلاحها. أو، أعتقد، يمكنك فقط إيقافها قبل أن تقوم بهذا الفحص.

أعتقد أنه يجب عليّ استخدام هذا أثناء استعادة سطر الأوامر

نفس الخطأ:
جارٍ تحميل الملفات إلى S3…

  • سرد الملفات المحلية
    => ملفان
  • سرد ملفات S3
    … => 183549 ملفًا
  • مزامنة الملفات مع S3
    ..
    تحديث الروابط في قاعدة البيانات…
    إزالة الصور المحسّنة القديمة…
    وضع علامة على جميع المشاركات التي تحتوي على مربعات إضاءة لإعادة الخَبز…
    تم وضع علامة على 169809 مشاركة لإعادة الخَبز
    استثناء: لم تتم إعادة تعيين 3 مشاركات إلى مسار تحميل S3 الجديد. فشلت ترحيل S3 لقاعدة البيانات ‘default’.
    /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in raise_or_log' /var/www/discourse/lib/file_store/to_s3_migration.rb:81:in migration_successful?’
    /var/www/discourse/lib/file_store/to_s3_migration.rb:385:in migrate_to_s3' /var/www/discourse/lib/file_store/to_s3_migration.rb:59:in migrate’
    /var/www/discourse/lib/file_store/s3_store.rb:367:in copy_from' /var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in restore_uploads’
    /var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in restore' /var/www/discourse/lib/backup_restore/restorer.rb:179:in restore_uploads’
    /var/www/discourse/lib/backup_restore/restorer.rb:72:in run' script/discourse:243:in restore’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in run' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in invoke_command’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in dispatch' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/base.rb:584:in start’
    script/discourse:397:in \u003ctop (required)\u003e’ /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in load’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in kernel_load' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in exec' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in invoke_command' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in dispatch’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in dispatch' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in start’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in start' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in block in \u003ctop (required)\u003e’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in with_friendly_errors' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in \u003ctop (required)\u003e’
    /usr/local/bin/bundle:25:in load' /usr/local/bin/bundle:25:in
    محاولة التراجع…
    التراجع…
    تنظيف الأشياء…
    إسقاط الدوال من مخطط discourse_functions…
    إزالة الدليل المؤقت ‘/var/www/discourse/tmp/restores/default/2026-01-13-145033’…
    إلغاء إيقاف sidekiq مؤقتًا…
    وضع علامة على الاستعادة على أنها منتهية…
    إخطار ‘system’ بنهاية الاستعادة…
    انتهى!

إما أن تقوم بإصلاح عمليات التحميل الثلاث تلك أو توقف الاستعادة قبل أن تجري هذا الفحص.

كيف يمكنني العثور على
3 منشورات على 168000؟
هل من الممكن إيقاف الاستعادة، وتخطي هذا التحقق؟

سألقي نظرة على الكود الذي يقوم بهذا الاختبار ثم أقوم بتشغيل نفس الاستعلام. ربما أكون قد نشرت الكود للقيام بذلك من قبل.

لقد نشرت

هل فعلت ذلك؟ أعتقد أنه يمكنك فقط الضغط على Ctrl+C بعد الانتهاء من الاستعادة. هل تقوم باستعادة قاعدة البيانات فقط؟

يا إلهي، لم أفكر في إيقاف الاستعادة بعد قاعدة البيانات وقبل التحميلات.
لست بحاجة إلى نقل التحميلات من S3 - هل يمكنني فقط ترحيل الواجهة الأمامية وقاعدة البيانات؟

هل يمكنك إخباري بالخيار الذي يسمح لك بإيقاف rake على المنشورات وتحديد المنشورات التي بها مشكلة؟ سيكون ذلك محل تقدير كبير.