فشل الاستعادة من إصدار قديم إلى إصدار جديد من discourse

أرغب في ترقية نظام Discourse من إصدار قديم جدًا إلى أحدث إصدار.

تحتوي حزمة النسخ الاحتياطي من إصدار Discourse الأصلي على ملف meta.json:

{"source":"discourse","version":20160405172827}

عند استعادة النسخة الاحتياطية في أحدث إصدار من Discourse، ظهر الخطأ التالي:

[2019-12-10 08:33:37] التأكد من وجود /var/www/discourse/tmp/restores/default/2019-12-10-083337...
[2019-12-10 08:33:37] نسخ الأرشيف إلى الدليل المؤقت...
[2019-12-10 08:33:40] فك ضغط الأرشيف، قد يستغرق هذا بعض الوقت...
[2019-12-10 08:34:27] استثناء: نوع الوسيطة خاطئ (nil) (متوقع String)
[2019-12-10 08:34:27] /var/www/discourse/lib/backup_restore/restorer.rb:151:in `load_file'
/var/www/discourse/lib/backup_restore/restorer.rb:151:in `extract_metadata'
/var/www/discourse/lib/backup_restore/restorer.rb:62:in `run'
/var/www/discourse/lib/backup_restore.rb:166:in `block in start!'
/var/www/discourse/lib/backup_restore.rb:163:in `fork'
/var/www/discourse/lib/backup_restore.rb:163:in `start!'
/var/www/discourse/lib/backup_restore.rb:22:in `restore!'
/var/www/discourse/app/controllers/admin/backups_controller.rb:119:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:196:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:135:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:136:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/rendering.rb:39:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiling_methods.rb:104:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:191:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:252:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:48:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49:in `block in serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:38:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/head.rb:12:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:318:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232:in `context'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:101:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/logster-2.4.2/lib/logster/middleware/reporter.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:38:in `call_app'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:18:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/method_override.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiler.rb:296:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:181:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:526:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:605:in `process_client'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:700:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:144:in `start'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'
[2019-12-10 08:34:27] محاولة التراجع...
[2019-12-10 08:34:27] لا حاجة للتراجع
[2019-12-10 08:34:27] تنظيف الملفات...
[2019-12-10 08:34:27] حذف الدالة من مخطط discourse_functions
[2019-12-10 08:34:27] إزالة الدليل المؤقت '/var/www/discourse/tmp/restores/default/2019-12-10-083337'...
[2019-12-10 08:34:42] إعادة تشغيل sidekiq...
[2019-12-10 08:34:42] تحديد حالة الاستعادة على أنها منتهية...
[2019-12-10 08:34:42] إشعار '18401535466' بنهاية عملية الاستعادة...
[2019-12-10 08:34:52] انتهى!

هل يمكن لأي شخص مساعدتي؟ شكرًا لك!

هناك خبراء هنا من المؤكد أن لديهم إجابات أفضل مني، ولكن مع ذلك:
ربما يمكنك محاولة تثبيت إصدار أقدم من Discourse (المتوافق مع نسخة احتياطية الخاصة بك)، ثم استعادة النسخة الاحتياطية، ثم تحديث Discourse عبر سطر الأوامر.

تهانينا! أنت أول شخص يبلغ عن هذا الخطأ حسب علمي. :slight_smile:
لقد أصلحت المشكلة قبل أسبوعين وقلت لنفسي: “واو، لم يبلغ أحد عن ذلك بعد، على الرغم من أنها كانت معطلة لفترة طويلة جدًا.”

على أي حال، الإصلاح غير متاح بعد، لأنه جزء من إعادة هيكلة كبيرة لعملية النسخ الاحتياطي والاستعادة. يمكنك إما الانتظار بضعة أيام إضافية حتى يكتمل أو تجربة الحل البديل التالي:

  • استخرج ملف النسخ الاحتياطي
  • افتح ملف meta.json واحفظ قيمة “version” (في حالتك 20160405172827)
  • احذف ملف meta.json
  • أنشئ أرشيفًا مضغوطًا بملفات ومجلدات gzipped المتبقية وتأكد من أن اسم الملف ينتهي برقم الإصدار من ملف meta.json. في حالتك قد يبدو كالتالي: discourse-2019-12-10-010038-v20160405172827.tar.gz
  • حاول استعادة ملف النسخ الاحتياطي هذا. يجب أن يعمل.

فقط لأعرف، هل اقتراحي سيعمل في هذه الحالة؟

طالما أنك تجد إصدارًا قديمًا لا يزال الاستعادة يعمل فيه، نعم. لكن قد تحتاج أيضًا إلى العثور على إصدار من discourse_docker متوافق مع إصدار قديم وغير مدعوم من Discourse. هذا يعقد الأمور قليلاً. :wink:

شكرًا جزيلاً على ردك. لقد نجحت اقتراحك. لقد تجنبت تلك المشكلة، لكنني الآن أواجه مشكلة أخرى.
:joy:

[2019-12-10 13:06:51] بدأ '18401535466' عملية الاستعادة!
[2019-12-10 13:06:51] جاري وضع علامة على الاستعادة كـ قيد التشغيل...
[2019-12-10 13:06:51] التأكد من وجود /var/www/discourse/tmp/restores/default/2019-12-10-130651...
[2019-12-10 13:06:51] جاري نسخ الأرشيف إلى مجلد المؤقت...
[2019-12-10 13:06:53] جاري فك ضغط الأرشيف، قد يستغرق ذلك بعض الوقت...
[2019-12-10 13:08:08] لا يوجد ملف بيانات وصفية لاستخراجه.
[2019-12-10 13:08:08] جاري التحقق من البيانات الوصفية...
[2019-12-10 13:08:08]   الإصدار الحالي: 20191129144706
[2019-12-10 13:08:08]   الإصدار المستعاد: 20160405172827
[2019-12-10 13:08:08] جاري استخراج ملف التصدير...
[2019-12-10 13:08:08] استثناء: لا يوجد ملف أو دليل @ realpath_rec - /shared/tmp/restores/default/2019-12-10-130651/dump.sql.gz
[2019-12-10 13:08:08] /var/www/discourse/lib/compression/strategy.rb:47:in `realpath'
/var/www/discourse/lib/compression/strategy.rb:47:in `realpath'
/var/www/discourse/lib/compression/strategy.rb:47:in `sanitize_path'
/var/www/discourse/lib/compression/strategy.rb:13:in `decompress'
/var/www/discourse/lib/backup_restore/restorer.rb:176:in `extract_dump'
/var/www/discourse/lib/backup_restore/restorer.rb:65:in `run'
/var/www/discourse/lib/backup_restore.rb:166:in `block in start!'
/var/www/discourse/lib/backup_restore.rb:163:in `fork'
/var/www/discourse/lib/backup_restore.rb:163:in `start!'
/var/www/discourse/lib/backup_restore.rb:22:in `restore!'
/var/www/discourse/app/controllers/admin/backups_controller.rb:119:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:196:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:135:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:136:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/rendering.rb:39:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiling_methods.rb:104:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:191:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:252:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:48:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49:in `block in serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:38:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/head.rb:12:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:318:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232:in `context'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:101:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/logster-2.4.2/lib/logster/middleware/reporter.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:38:in `call_app'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:18:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/method_override.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiler.rb:296:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:181:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:526:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:605:in `process_client'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:700:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:144:in `start'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'
[2019-12-10 13:08:08] جاري محاولة التراجع...
[2019-12-10 13:08:08] لم يكن هناك حاجة للتراجع
[2019-12-10 13:08:08] جاري تنظيف الأشياء...
[2019-12-10 13:08:08] جاري إسقاط الدالة من مخطط discourse_functions
[2019-12-10 13:08:08] جاري إزالة المجلد المؤقت '/var/www/discourse/tmp/restores/default/2019-12-10-130651'...
[2019-12-10 13:08:37] جاري إلغاء إيقاف sidekiq مؤقتًا...
[2019-12-10 13:08:37] جاري وضع علامة على الاستعادة كـ منتهية...
[2019-12-10 13:08:37] جاري إخطار '18401535466' بنهاية الاستعادة...
[2019-12-10 13:08:46] انتهى!

هل يمكنك إعطائي تلميحًا عما يجب أن أفعله بعد ذلك؟

شكرًا لك على ردك. أثناء عودتي إلى المنزل في الحافلة، كنت أفكر في كيفية العثور على صورة قديمة كهذه. :rofl: :rofl: :rofl:

آه، نعم، أعتقد أن هناك خطأً آخر. تأكد من ضغط ملف dump.sql باستخدام gzip قبل إضافته إلى ملف tar. يجب أن يحتوي النسخ الاحتياطي على ملف dump.sql.gz.

في حالتي، يوجد ملف dump.sql ولكن ليس dump.sql.gz. سأحاول مرة أخرى.

بعد ضغط ملف dump.sql وإعادة رفع ملف النسخ الاحتياطي، واجهت هذا الخطأ. هل يمكنك مساعدتي؟ :smiley:

[2019-12-11 00:58:37] بدأ '18401535466' عملية الاستعادة!
[2019-12-11 00:58:37] يتم الآن تحديد حالة الاستعادة على أنها قيد التنفيذ...
[2019-12-11 00:58:37] التأكد من وجود المسار /var/www/discourse/tmp/restores/default/2019-12-11-005837...
[2019-12-11 00:58:37] نسخ الأرشيف إلى مجلد المؤقت...
[2019-12-11 00:58:39] فك ضغط الأرشيف، قد يستغرق هذا بعض الوقت...
[2019-12-11 00:59:54] لا يوجد ملف بيانات وصفية (metadata) لاستخراجه.
[2019-12-11 00:59:54] التحقق من صحة البيانات الوصفية...
[2019-12-11 00:59:54]   الإصدار الحالي: 20191129144706
[2019-12-11 00:59:54]   الإصدار المستعاد: 20191129144706
[2019-12-11 00:59:54] استخراج ملف dump...
[2019-12-11 00:59:55] إنشاء الدوال المفقودة في مخطط discourse_functions
[2019-12-11 00:59:56] استثناء: لا توجد طريقة `[]` لـ nil:NilClass
[2019-12-11 00:59:56] /var/www/discourse/lib/backup_restore/restorer.rb:286: في `get_dumped_by_version`
/var/www/discourse/lib/backup_restore/restorer.rb:290: في `can_restore_into_different_schema?`
/var/www/discourse/lib/backup_restore/restorer.rb:68: في `run`
/var/www/discourse/lib/backup_restore.rb:166: في `block in start!`
/var/www/discourse/lib/backup_restore.rb:163: في `fork`
/var/www/discourse/lib/backup_restore.rb:163: في `start!`
/var/www/discourse/lib/backup_restore.rb:22: في `restore!`
/var/www/discourse/app/controllers/admin/backups_controller.rb:119: في `restore`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6: في `send_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:196: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42: في `block in process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:135: في `run_callbacks`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33: في `block in process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180: في `block in instrument`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24: في `instrument`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180: في `instrument`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27: في `process_action`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:136: في `process`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/rendering.rb:39: في `process`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiling_methods.rb:104: في `block in profile_method`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:191: في `dispatch`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:252: في `dispatch`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51: في `dispatch`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33: في `serve`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:18: في `block in <class:Constraints>`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/mapper.rb:48: في `serve`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49: في `block in serve`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32: في `each`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32: في `serve`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837: في `call`
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:38: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/head.rb:12: في `call`
/var/www/discourse/lib/content_security_policy/middleware.rb:12: في `call`
/var/www/discourse/lib/middleware/anonymous_cache.rb:318: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232: في `context`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27: في `block in call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:101: في `run_callbacks`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/logster-2.4.2/lib/logster/middleware/reporter.rb:43: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:38: في `call_app`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:28: في `call`
/var/www/discourse/config/initializers/100-quiet_logger.rb:18: في `call`
/var/www/discourse/config/initializers/100-silence_logger.rb:31: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27: في `call`
/var/www/discourse/lib/middleware/enforce_hostname.rb:17: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/method_override.rb:22: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiler.rb:296: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57: في `call`
/var/www/discourse/lib/middleware/request_tracker.rb:181: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:526: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190: في `public_send`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190: في `method_missing`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68: في `block in call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53: في `each`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53: في `call`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:605: في `process_client`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:700: في `worker_loop`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:548: في `spawn_missing_workers`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:144: في `start`
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/bin/unicorn:128: في `<top (required)>`
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23: في `load`
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23: في `<main>`
[2019-12-11 00:59:56] محاولة التراجع...
[2019-12-11 00:59:56] لم يكن هناك حاجة للتراجع
[2019-12-11 00:59:56] تنظيف الملفات المؤقتة...
[2019-12-11 00:59:56] إزالة الدالة من مخطط discourse_functions
[2019-12-11 00:59:56] حذف المجلد المؤقت '/var/www/discourse/tmp/restores/default/2019-12-11-005837'...
[2019-12-11 01:00:26] إعادة تشغيل sidekiq...
[2019-12-11 01:00:26] تحديد حالة الاستعادة على أنها منتهية...
[2019-12-11 01:00:26] إشعار '18401535466' بنهاية عملية الاستعادة...
[2019-12-11 01:00:37] انتهى!

https://meta.discourse.org/t/restore-failed-at-validating-metadata/31318/2

ظننتُ أنني سأستطيع حل مشكلتي من خلال هذا المنشور، لكنني لم أتمكن من العثور عليه أو كان خاصًا عندما زرت هذه الصفحة.

مرحبًا، هل ما زلت قلقًا بشأن هذه المشكلة؟ لقد قمت بالعديد من الأمور ضمن طاقتي، لكنني لا أستطيع حل مشكلتي بعد. أطلب مساعدتك :sweat_smile:

هل حاولت استعادة نسخة احتياطية مختلفة هذه المرة؟

أيضًا، هل يمكنك إلقاء نظرة على ملف dump.sql؟ يجب أن يحتوي على شيء مثل -- Dumped by pg_dump version 9.5.12 في أول بضع سطور.

لقد أعيدت تصدير ملف النسخ الاحتياطي مع الإصدار 20160405172827، وعولج بالطريقة نفسها كما من قبل ثم تم رفعه. بعد الاستيراد، لا يزال لدي هذه المشكلة: undefined method ’ for nil:NilClass`

إليك محتويات ملف dump.sql الخاص بي:

--
-- PostgreSQL database dump
--

-- Dumped from database version 9.4.8
-- Dumped by pg_dump version 9.4.9
-- Started on 2019-12-13 09:38:57 CST

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

DROP SCHEMA IF EXISTS restore CASCADE; CREATE SCHEMA restore; SET search_path = restore, public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- TOC entry 175 (class 1259 OID 19494)
-- Name: api_keys; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE api_keys (
    id integer NOT NULL,
    key character varying(64) NOT NULL,
    user_id integer,
    created_by_id integer,
    created_at timestamp without time zone NOT NULL,
    updated_at timestamp without time zone NOT NULL,
    allowed_ips inet[],
    hidden boolean DEFAULT false NOT NULL
);

·
·
·

--
-- TOC entry 3252 (class 1259 OID 21916)
-- Name: user_id_topic_id_topic_views; Type: INDEX; Schema: public; Owner: -; Tablespace: 
--

CREATE UNIQUE INDEX user_id_topic_id_topic_views ON topic_views USING btree (user_id, topic_id) WHERE (user_id IS NOT NULL);


-- Completed on 2019-12-13 09:39:01 CST

--
-- PostgreSQL database dump complete
--

تم التصدير من PostgreSQL الإصدار 9.4.8، لكنني أستخدم حاليًا الإصدار 10.11. هل يمكن أن يكون هذا هو السبب؟

ملاحظة: حاولت استيراد ملف dump.sql يدويًا عبر سطر الأوامر: psql -h 127.0.0.1 -U discourse -d discourse < dump.sql. وقد نجح الأمر. لكن واجهة Discourse الخاصة بي لم تتغير.

يبدو أن ترويسة الملف على ما يرام. لقد اختبرت استعادةً باستخدامها ونجحت العملية.

ربما هناك مشكلة في الملف الذي أنشأته. داخل المجلد الذي يحتوي على ملف dump.sql ومجلد uploads، نفذت الأوامر التالية لإنشاء أرشيف جديد:

gzip dump.sql
tar -czvf discourse-2019-12-13-183529-v20160405172827.tar.gz uploads/ dump.sql.gz

مرحبًا،

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

ومع ذلك، واجهت مشكلة أخرى مزعجة: كان نظام discourse الأصلي يستخدم SSO. عند استعادة النسخة الاحتياطية، أردت تغيير اسم المستخدم وكلمة المرور لتسجيل الدخول إلى نظام discourse الجديد. لكن هذا غير مسموح به؛ فلا يمكن تسجيل الدخول كمسؤول، ولا توجد صلاحيات لتعديل خيارات تسجيل الدخول. ما الذي يجب أن أفعله؟

أخيرًا، حلّ هذا المقال مشكلتي، والآن أستخدم discourse بسعادة.