لا يمكن ترحيل التحميلات إلى S3

مرحباً، لقد قمنا بإعداد استضافة التحميل (باستخدام إعدادات S3) على Backblaze.
تعمل التحميلات الجديدة (بعد إصلاح ترويسة x-amz-checksum-crc32)، ومع ذلك فإن محاولة ترحيل التحميلات الموجودة باستخدام uploads:migrate_to_s3 تفشل على الفور.

هذا على أحدث إصدار من Discourse (3.5.0.beta5-dev).
إليك المخرجات الكاملة:

root@goactuary-app:/var/www/discourse# rake uploads:migrate_to_s3 --trace
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
Please note that migrating to S3 is currently not reversible!
[CTRL+c] to cancel, [ENTER] to continue

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126: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.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21: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>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/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 <top (required)>'
/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 `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

تحتاج إلى وضعها في ملف app.yml الخاص بك كما هو موضح في تكوين موفر تخزين كائنات متوافق مع S3 للتحميلات

هل تقصد أنك أضفت رمزًا إلى ملف app.yml الخاص بك لإعادة مكتبة aws إلى إصدار يعمل مع backblaze؟

إعجابَين (2)

نعم، إنها في ملف app.yml وقد قمت بإعادة بناء التطبيق.
لقد تأكدت من أن الملفات التي تم تحميلها حديثًا يتم إرسالها إلى هناك.

ليس تمامًا. أنا أستخدم متغيرات البيئة التالية:

  AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED
  AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED

لقد أصلحت هذه الإعدادات مشكلة عدم القدرة على تحميل ملفات جديدة بعد تغيير الإعدادات.

قد تحتاج إلى تعقب هذه بنفسك.

في Rails يمكنك

 Upload.pluck(:url)

ثم البحث عن التحميلات التي تمثل المشكلة.

أعتقد من خلال تجربتي أن هذا لم يكن كافيًا، لكنك تقول إنه يعمل معك.

إعجابَين (2)

تمت ترقية صور uploads:migrate_to_s3 يدويًا في الحاوية بالفعل، مما أدى إلى تحميل الصور بالفعل، لذلك لم تكن متغيرات البيئة كافية، كما أشرت.

ومع ذلك، فشلت العملية لاحقًا في نقطة مختلفة:

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

ستكون هذه مغامرة استكشاف أخطاء منفصلة.

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

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

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

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

لقد وجدتها!
لا يمكن استعادة نسخة احتياطية إذا كانت تتضمن رابطًا إلى Discourse onebox

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

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

@stanski هل حل هذا مشكلتك؟

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

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

أدركت أنه على الرغم من الخطأ، يبدو أنه تم ترحيل التحميلات إلى Backblaze وتحديث المنشورات.
قمت بأرشفة التحميلات المحلية ونقلها إلى مكان آخر ولم أسمع أي شكاوى منذ ذلك الحين.

إذًا، في الختام، نعم، تم إصلاح مشكلتي.
شكرًا لـ @pfaffman على الاقتراحات المستمرة.

الآن لدي شكوى من أن جدران الحماية المختلفة تحظر التحميلات المستضافة على Backblaze، ولكن هذا موضوع آخر.

أعتقد أنك تريد حقًا استخدام شبكة توصيل المحتوى (CDN).

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