لا يمكن تحميل Avatars مع تمكين S3 Storage (الملف موجود، ولا يزال يفشل)

أهلاً بالجميع،

أواجه مشكلة غريبة مع تخزين Discourse + S3.

عند تحميل الصور الرمزية، أحصل على خطأ مثل الذي أدناه - على الرغم من أن الملف موجود في حاوية S3 ويمكن الوصول إليه عبر s3_cdn_url صالح.

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


:fire: رسالة الخطأ من gig.ovh/logs


الرسالة (تم الإبلاغ عن نسختين)

تعذر العثور على الملف في المتجر الموجود على العنوان: //gig.s3.ru-1.storage.selcloud.ru/original/1X/fd42dfa3362b66090450f2ae40f0917193fcd355.jpeg

تتبع المكدس

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active\ _support/broadcast\ _logger.rb:134:in `block in error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active\ _support/broadcast\ _logger.rb:134:in `error'
/var/www/discourse/app/models/optimized_image.rb:91:in `block in create\ _for'
/var/www/discourse/app/models/optimized\ _image.rb:19:in `block (2 levels) in lock'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:34:in `synchronize'
/var/www/discourse/app/models/optimized_image.rb:19:in `block in lock'
/var/www/discourse/lib/distributed\ _mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed\ _mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/app/models/optimized\ _image.rb:18:in `lock'
/var/www/discourse/app/models/optimized_image.rb:83:in `create\ _for'
/var/www/discourse/app/models/upload.rb:151:in `get_optimized_image'
/var/www/discourse/app/controllers/user_avatars_controller.rb:219:in `get\ _optimized_image'
/var/www/discourse/app/controllers/user\ _avatars_controller.rb:137:in `show_in_site'
/var/www/discourse/app/controllers/user_avatars_controller.rb:90:in `block (2 levels) in show'
/var/www/discourse/lib/hijack.rb:68:in `instance_eval'
/var/www/discourse/lib/hijack.rb:68:in `block (2 levels) in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/lib/hijack.rb:68:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:797:in `call\ _callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve\ _with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do\ _work'
/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.rb:21:in `with\ _connection'
/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start\ _thread'

هذا عنوان URL لـ S3 للحاوية

//gig.s3.ru-1.storage.selcloud.ru/original/1X/fd42dfa3362b66090450f2ae40f0917193fcd355.jpeg

الصورة متاحة على العنوان:

https://s3.gig.ovh/original/1X/fd42dfa3362b66090450f2ae40f0917193fcd355.jpeg

:white_check_mark: معلومات إضافية

  • إصدار Discourse: (أحدث إصدار مستقر)
  • تم استخدام تخزين خارجي متوافق مع S3 (enable_s3_uploads = true)
  • s3_cdn_url تم تكوينه واستخدامه بشكل صحيح
  • عنوان URL لشبكة توصيل المحتوى (CDN) يعيد الملف بنجاح
  • تم التأكد من وجود الملف في موقع S3 المتوقع
  • عمليات التحميل الأخرى (الصور، المرفقات، إلخ) تعمل بشكل جيد
  • الخطأ يحدث فقط مع الصور الرمزية للمستخدمين

:red_question_mark: سؤال

ما الذي يمكن أن يتسبب في فشل Discourse في استرداد الملف لمعالجة الصورة الرمزية بينما الملف نفسه موجود ويمكن الوصول إليه عبر عنوان URL الصحيح لشبكة توصيل المحتوى (CDN)؟

هل هناك شيء خاص بمعالجة الصور الرمزية (مثل get_optimized_image) يمكن أن يكون خاطئ التكوين أو مخزنًا مؤقتًا بشكل غير صحيح؟

أي اقتراحات أو رؤى ستكون موضع تقدير!

شكرًا :folded_hands:

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

مرحباً - هل قمت بحل هذا الأمر على الإطلاق؟

أواجه نفس العرض بالضبط على Discourse + S3 (الصور الرمزية فقط):
Could not find file in the store located at url: //\u003cbucket\u003e.s3.dualstack.\u003cregion\u003e.amazonaws.com/original/1X/\u003chash\u003e.jpeg

بعض التفاصيل حول إعداداتي، في حال كانت تتطابق مع إعداداتك:

  • enable_s3_uploads = true، الكائنات موجودة في original/* و optimized/* (لا يوجد بادئة uploads/default)

  • الوصول عبر CloudFront (OAC)، الحاوية نفسها خاصة

  • الكائن موجود في هذا المفتاح؛ عنوان URL لشبكة توصيل المحتوى (CDN) يعمل

  • يحدث الخطأ فقط لمعالجة الصور الرمزية

  • (محتمل) يتم تشفير التحميلات باستخدام SSE-KMS

إذا وجدت السبب الجذري أو حلاً (تغيير السياسة، أذونات KMS، محاذاة مسار الحاوية، إلخ)، هل يمكنك مشاركة ما نجح؟ شكراً!