هل المنشور الأول في الأعلى https://meta.discourse.org/t/set-up-file-and-image-uploads-to-s3
لا يزال دليلًا صالحًا يسمح للمسؤولين بالقيام بذلك؟ إذا لم يكن كذلك، فهل هناك أي مكان آخر يوجد به دليل S3 الصحيح لعام 2024؟ يُقال إن هذا دليل رسمي ومدعوم من فريق Discource.
لقد قمنا بتطبيقه كما في الأعلى والصور معطلة في مثيل Discourse على الرغم من تحميلها إلى S3.
تدفقنا
إعداد دلو S3 نفسه والسياسة في S3 كما في الأعلى (تم اتباع جميع الخطوات بدقة)
إعداد البيئة في app.yml وفي المسؤول (متطابق) كما في الأعلى
إعادة بناء التطبيق باستخدام launcher
لا يتم استخدام أي شبكة توصيل محتوى (CDN) على الإطلاق لأن فهمنا هو أنها اختيارية ويجب أن تعمل بدون CDN.
الروابط غير متاحة (بافتراض أنها بسبب سياسة S3 في الدليل الرسمي)
تغيير مفترض لسياسة S3 الرسمية في الدليل. Principal: هذه السياسة لا تحدد Principal، مما يعني أنها تنطبق على كل من تم المصادقة عليه بالأذونات الصحيحة. للسماح بالوصول المجهول (العام)، نحتاج إلى تحديد \"Principal\": \"*\". قد لا يكون هذا حلاً جيدًا لأنه يجعل الدلو عامًا. هذا افتراض لأننا نقدر إذا قام شخص ما بتحديث الدليل لجعله صحيحًا في عام 2024
Hey,
.we are using Cloudflare R2 for s3 storage(it works now) and i wanted to move discourse to another server.
However profile pictures were missing when restoring from a backup even when checking the “backup uploads” option.
so i ran the s3 migrate command on the old server to migrate images that are still local, and it’s failing with this trace, it’s not clear what’s the reason.
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'...
Uploading files to S3...
- Listing local files
..... => 5123 files
- Listing S3 files
....... => 6871 files
- Syncing files to S3
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^[[B............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Updating the URLs in the database...
Removing old optimized images...
Flagging all posts containing lightboxes for rebake...
828 posts were flagged for a rebake
rake aborted!
FileStore::ToS3MigrationError: 4898 of 5838 uploads are not migrated to S3. S3 migration failed for db 'default'. (FileStore::ToS3MigrationError)
/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:73:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383: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.5.18/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:455:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
it seems these pictures are still stored locally for some reason, even though i ran this migration script before.
أود أن أعرف ما إذا كانت ستكون هناك أي مشاكل إذا حاولت تغيير مزودي خدمة S3، متجاهلاً مشكلة الصور التي تم تحميلها بالفعل. ليس لدي أي مشاكل كبيرة مع هذا لأن الموقع ليس قيد التشغيل بعد؛ ما زلت أقوم بتطويره.
هل من الممكن حفظ الصور محليًا ثم تفعيل S3 مرة أخرى مع مزود الخدمة الجديد؟
يذكر الخيط المرتبط طلب سحب لإزالة مهمة migrate_from_s3، ولم أر أي سبب للاعتقاد بأنه تمت إضافتها مرة أخرى لاحقًا، ولكني أردت التحقق مما إذا كان هذا لا يزال هو الحال. أنا أفكر في الترحيل إلى MinIO وأنا قلق بعض الشيء بشأن جعله تبعية.
أتساءل عما إذا كان هذا يمكن أن يوفر حلاً بديلاً لما ذكرته أعلاه. تضمين هذا الإعداد، وعمل نسخة احتياطية، وتعطيل إعدادات S3، واستعادة النسخة الاحتياطية.
من هذا الموضوع، يبدو أن هذا الإعداد يقوم بتنزيل الملفات الفردية من S3، ولكني أتساءل عما إذا كانت هناك مشكلات محتملة مع المشاركات التي تشير إلى عناوين URL الخاصة بـ S3 بدلاً من الملفات المحلية. لست متأكدًا من كيفية التعامل مع ذلك في قاعدة البيانات. سأكون مهتمًا بمعرفة ما إذا كانت عملية انتقالك إلى مزود آخر ناجحة، @Rhod.
لقد أجريت الانتقال بسلاسة. أؤكد أنني لم أواجه أي مشاكل كبيرة لأن عدد الصور أو النسخ الاحتياطي كان ضئيلاً. كان المنتدى مخصصًا بالكامل لأغراض الاختبار، ولم يكن في “مرحلة الإنتاج” بعد. أخيرًا، بعد عدة محاولات وخطأ، أعدت تثبيت المنتدى على خادم جديد (Hetzner) وقمت بتكوين S3 (Cloudflare R2) للنسخ الاحتياطي والصور مع الخادم الذي أقنعني في النهاية.
أعتذر عن عدم قدرتي على تقديم الكثير من المساعدة. سأرى ما إذا كان بإمكاني اختباره على خادم آخر في المستقبل.