تعذر النسخ الاحتياطي أو الانتقال إلى النسخ الاحتياطية

الحصول على

فشل النسخ الاحتياطي.

ها هي السجلات:

undefined method `start_with?' for nil /var/www/discourse/app/models/site_setting.rb:172:in `use_dualstack_endpoint’
/var/www/discourse/lib/s3_helper.rb:269:in `s3_options' /var/www/discourse/lib/backup_restore/s3_backup_store.rb:14:in `initialize’
/var/www/discourse/lib/backup_restore/backup_store.rb:17:in `new'`


بعد إعادة بناء حديثة جدًا إلى أحدث إصدار.

في حالتي، يتم استضافة S3 باستخدام دلو AWS عادي.

هل يمكن أن يكون هذا مرتبطًا؟

4 إعجابات

أستخدم مساحة تخزين الكائنات minio لتخزين S3 الخاص بي وأحصل على هذا الخطأ:

rake aborted!
Aws::S3::Errors::Http504Error: Aws::S3::Errors::Http504Error (Aws::S3::Errors::Http504Error)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/client.rb:11285:in `list_objects_v2'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/bucket.rb:1304:in `block (2 levels) in objects'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/user_agent.rb:28:in `feature'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/bucket.rb:1303:in `block in objects'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:101:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:101:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:101:in `block in non_empty_batches'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:52:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:52:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:52:in `block in each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:58:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:58:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/resources/collection.rb:58:in `each'
/var/www/discourse/lib/tasks/s3.rake:14:in `map'
/var/www/discourse/lib/tasks/s3.rake:14:in `existing_assets'
/var/www/discourse/lib/tasks/s3.rake:210:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:expire_missing_assets
(See full trace by running task with --trace)
I, [2024-11-11T08:02:51.942337 #1]  INFO -- : Checking for stale S3 assets...

I, [2024-11-11T08:02:51.944197 #1]  INFO -- : Terminating async processes
I, [2024-11-11T08:02:51.944334 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 39
I, [2024-11-11T08:02:51.944432 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 107
2024-11-11 08:02:51.944 UTC [39] LOG:  received fast shutdown request
107:signal-handler (1731312171) Received SIGTERM scheduling shutdown...
2024-11-11 08:02:51.945 UTC [39] LOG:  aborting any active transactions
2024-11-11 08:02:51.949 UTC [39] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
2024-11-11 08:02:51.950 UTC [49] LOG:  shutting down
107:M 11 Nov 2024 08:02:51.960 # User requested shutdown...
107:M 11 Nov 2024 08:02:51.960 * Saving the final RDB snapshot before exiting.
2024-11-11 08:02:52.047 UTC [39] LOG:  database system is shut down
107:M 11 Nov 2024 08:02:52.207 * DB saved on disk
107:M 11 Nov 2024 08:02:52.208 # Redis is now ready to exit, bye bye...

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake s3:expire_missing_assets failed with return #&lt;Process::Status: pid 3550 exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
4f601885ffad64bcd29f6dbd06df1f0f86ad301341d40e752df7447809a32eff

@martin

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

هناك مشكلة أخرى وهي أنه لم يعد بإمكانك الانتقال إلى النسخ الاحتياطي:

خطأ أثناء حساب التقرير `storage_stats`: الطريقة غير المعرفة `start_with?' لـ nil
/var/www/discourse/app/models/site_setting.rb:172:in `use_dualstack_endpoint'
/var/www/discourse/lib/s3_helper.rb:269:in `s3_options'
إعجابَين (2)

هل يمكن أن يكون هذا هو السبب؟

[7] pry(main)> SiteSetting.Upload.s3_region
=> nil
[8] pry(main)> SiteSetting.s3_region
=> "eu-west-2"
[9] pry(main)>

SiteSetting.Upload.s3_region فارغ في نسختي، لذا فإن starts_with? يرمي خطأ.

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

في طلب السحب هذا:

يستخدم الاختبار SiteSetting.s3_region، ولكن الكود يستخدم SiteSetting.Upload.s3_region :thinking:

إعجابَين (2)

@hosna و @merefield، هل SiteSetting.enable_s3_uploads صحيح لكليكما؟ إذا كان الأمر كذلك، فيجب علينا فقط استخدام SiteSetting.s3_region:

ماذا عن SiteSetting::Upload.enable_s3_uploads، ماذا يعطيك؟

يمكنني القيام بإصلاح كهذا، باستخدام التنقل الآمن لـ s3_region:

def self.use_dualstack_endpoint
  SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region&.start_with?("cn-")
end

لكنني أريد أن أفهم لماذا SiteSetting.Upload.s3_region فارغ بالنسبة لك.

إعجابَين (2)

حسنًا، هذا يزداد غرابة، هناك إعدادان؟

image

  • أستخدم S3 للنسخ الاحتياطي ولكن ليس لتحميل الملفات (وهو خيار صالح وكان هو الحال لسنوات؟)
  • لا يتم فرض تفعيل كليهما بواسطة الواجهة.
  • لم أقم بتغيير أي إعدادات منذ سنوات.

وبالتالي فإن SiteSetting::Upload.s3_region فارغ لأنني لا أستخدمه؟

على الرغم من أنه كملاحظة جانبية، يجب أن يتم تجميع التحميلات مع النسخ الاحتياطي بغض النظر، ولكن SiteSetting.s3_region يجب أن يكون كافيًا لذلك؟

لا تزال النسخ الاحتياطية الخاصة بي تفشل

3 إعجابات

إذا كنت تقصد هذا الإعداد، فلا، لم يتم تمكينه لدي

لقد قمت بتكوين S3 في ملف app.yml الخاص بي على هذا النحو

والذي تم ذكره هنا

@martin

3 إعجابات

للتذكير، نفس المشكلة المذكورة أعلاه. لا يمكن الوصول إلى /admin/backups (خطأ 500)، فشل النسخ الاحتياطي.

النسخ الاحتياطي لـ S3 ممكّن، وتحميلات S3 ليست كذلك - لقد كان الأمر هكذا ويعمل بنجاح لسنوات.

سجل الأخطاء
### الرسالة (تم الإبلاغ عن 14 نسخة)

خطأ أثناء حساب التقرير `storage_stats`: الطريقة غير المعرفة `start_with?' لـ nil /var/www/discourse/app/models/site_setting.rb:172:in `use_dualstack_endpoint' /var/www/discourse/lib/s3_helper.rb:269:in `s3_options' /var/www/discourse/lib/backup_restore/s3_backup_store.rb:14:in `initialize' /var/www/discourse/lib/backup_restore/backup_store.rb:17:in `new' /var/www/discourse/lib/backup_restore/backup_store.rb:17:in `create' /var/www/discourse/app/models/concerns/reports/storage_stats.rb:10:in `report_storage_stats' /var/www/discourse/app/models/report.rb:269:in `public_send' /var/www/discourse/app/models/report.rb:269:in `block in find' /var/www/discourse/app/models/report.rb:165:in `block in wrap_slow_query' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5/lib/active_record/connection_adapters/abstract/transaction.rb:535:in `block in within_new_transaction' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5/lib/active_support/concurrency/null_lock.rb:9:in `synchronize' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5/lib/active_record/connection_adapters/abstract/transaction.rb:532:in `within_new_transaction' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.5/lib/active_record/connection_adapters/abstract/database_statements.rb:344:in `transaction' /var/www/discourse/app/models/report.rb:160:in `wrap_slow_query' /var/www/discourse/app/models/report.rb:267:in `find' /var/www/discourse/app/controllers/admin/reports_controller.rb:97:in `block (2 levels) in bulk' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:400:in `block in each_pair' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:399:in `each_pair' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:399:in `each_pair' /var/www/discourse/app/contro...

### تتبع المكدس

activesupport-7.1.5/lib/active_support/broadcast_logger.rb:134:in `block in error'

activesupport-7.1.5/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'

activesupport-7.1.5/lib/active_support/broadcast_logger.rb:231:in `each'

activesupport-7.1.5/lib/active_support/broadcast_logger.rb:231:in `dispatch'

activesupport-7.1.5/lib/active_support/broadcast_logger.rb:134:in `error'

/var/www/discourse/app/models/report.rb:295:in `rescue in find'

/var/www/discourse/app/models/report.rb:262:in `find'

/var/www/discourse/app/controllers/admin/reports_controller.rb:97:in `block (2 levels) in bulk'

actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:400:in `block in each_pair'

actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:399:in `each_pair'

actionpack-7.1.5/lib/action_controller/metal/strong_parameters.rb:399:in `each_pair'

/var/www/discourse/app/controllers/admin/reports_controller.rb:76:in `block in bulk'

/var/www/discourse/lib/hijack.rb:64:in `instance_eval'

/var/www/discourse/lib/hijack.rb:64:in `block in hijack'

concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'

concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'

concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'

concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'

concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'

/var/www/discourse/lib/scheduler/defer.rb:115:in `block in do_work'

rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'

rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'

/var/www/discourse/lib/scheduler/defer.rb:109:in `do_work'

/var/www/discourse/lib/scheduler/defer.rb:97:in `block (2 levels) in start_thread'

### البيئة

1/14

| المضيف | forum-app |
| --- | --- |
| process_id | 849 |
| application_version | 234133bd3b0750b2675a1c2c6745616c899df990 |
| HTTP_HOST | forum.glasair-owners.com |
| REQUEST_METHOD | GET |
| HTTP_USER_AGENT | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 |
| HTTP_ACCEPT | application/json, text/javascript, */*; q=0.01 |
| HTTP_REFERER | https://forum.glasair-owners.com/admin |
| HTTP_X_FORWARDED_FOR | xxx |
| HTTP_X_REAL_IP | xxx |
| username | xxx |
| time | 6:47 pm |
|| params null |
إعجابَين (2)

نفس المشكلة هنا…

3 إعجابات

لا. هذا هو الأمر، أنا متأكد. إنهم يستخدمون S3 للنسخ الاحتياطي، ولكن ليس للتحميلات، وهو إعداد شائع جدًا للمستضيفين الذاتيين. من السهل تكوين النسخ الاحتياطي لـ S3، ولا يتطلب شبكة توصيل محتوى (CDN) أو تغيير YML لتحميل الأصول المترجمة مسبقًا.

إنه فارغ لأنهم لا يستخدمون S3 للتحميلات.

      SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

من رابط github أعلاه، يجب أن يكون:

      GlobalSettings.use_s3 && SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

أو ربما:

      SiteSetting.enable_s3_uploads && SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

لست متأكدًا تمامًا من كيفية ارتباط use_s3 و enable_s3_uploads.

4 إعجابات

وأعتقد أن

يجب أن يكون بالفعل def self.enable_s3_uploads? (نظرًا لأنه يبلغ عما إذا كانت s3_uploads ممكّنة بدلاً من تمكين تحميلات s3) ثم

  SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

يجب أن يكون

  use_s3_uploads? && SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

من ناحية أخرى، هذا ما أسماه سام قبل 7 سنوات، ويبدو أنه كان على ما يرام على أي حال.:slight_smile:

لذلك، كما تم تسمية الدالة الآن

  use_s3_uploads && SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")
5 إعجابات

ألا يجب أن يكون:

use_s3_uploads? && !SiteSetting.Upload.s3_endpoint.blank? && !SiteSetting.Upload.s3_region.start_with?("cn-")

أي أن نقطة نهاية تحميل S3 ليست فارغة؟

3 إعجابات

لكنني أستخدم أيضًا S3 للتحميلات. لقد قمت بتكوينه في ملف app.yml الخاص بي.

3 إعجابات

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

لماذا تم دفع تغيير جذري كهذا دون أي إعلان؟

هل يُفترض بنا إدخال جميع التفاصيل في app.yml الآن؟

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

إعجابَين (2)

أعتقد أن الإعدادات لا تزال موجودة في واجهة المستخدم (موقع النسخ الاحتياطي، التكرار، حاوية S3، إلخ)، إنها ببساطة لا تعمل كما كانت من قبل.

لا أعتقد أن هذا تغيير وظيفي مقصود، هل هو معطل فقط؟

بالتأكيد يجب أن يظل من الممكن النسخ الاحتياطي إلى S3 دون الحاجة إلى تخزين التحميلات في S3 - هذان استخدامان منفصلان وإن كانا متوافقين إلى حد ما …

5 إعجابات

نفس المشكلة
كنت أستخدم S3 للنسخ الاحتياطي وليس للتحميل

إعجابَين (2)

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

3 إعجابات

عذرًا للجميع، كنت مريضًا لبضعة أيام. هذا يجب أن يحل المشكلة:

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

7 إعجابات

تمت إعادة البناء والنسخ الاحتياطي بنجاح.

شكرًا @martin.

4 إعجابات