لقد قمت مؤخرًا بتحديث منتديات الاختبار الخاصة بنا إلى الإصدار 3.3.0beta1. منتديات الاختبار هي في الأساس نسخة قديمة بعض الشيء (من حيث المحتوى) من منتدياتنا الحية. نستخدمها لاختبار التحديثات والميزات الجديدة. تستخدم نفس اتصال Amazon S3 للتحميلات مثل المنتديات الحية.
بعد تحديث نظام التشغيل المضيف إلى أحدث إصدار Ubuntu 24.04 LTS وتحديث المنتديات إلى الإصدار 3.3.0beta1، اختفت جميع الصور الرمزية المخصصة وظهرت الرؤوس البيضاء/الرمادية بدلاً منها.
بعد النظر إلى السجلات، وجدت رسائل مثل:
لا يمكن العثور على الملف في المخزن الموجود في العنوان: //ourbucket.s3.dualstack.eu-central-1.amazonaws.com/original/3X/6/9/69ca9110f27d91561axyz52a9cd9485a970fe9.jpeg
على الرغم من أن الصورة موجودة بالفعل في هذا العنوان وتعمل بشكل جيد. حاولت تنزيل الملف باستخدام wget من الخادم لمعرفة ما إذا كانت هناك أي مشكلات في DNS أو أشياء أخرى يمكن أن تعيق وكيل الصور الرمزية المحلي من الحصول عليه - ولكن هذا ليس هو الحال أيضًا.
أتساءل عما إذا كان منتدى الاختبار يقوم بتنظيف الأشياء التي لا يتوقعها في سلة s3، ولكنك تقول إن الأشياء موجودة في السلة، لذا فهذا ليس هو السبب. ربما استعادة قاعدة بيانات للاختبار وإلقاء نظرة على ما هو موجود في نموذج التحميلات.
المسألة هي - رسالة الخطأ في السجل تشير إلى أنه لا يمكن تحميل صورة معينة ولكن هذه الصورة بالضبط متاحة بالفعل. لذا هناك شيء يعيق وكيل المنتدى/الصورة الرمزية من سحب الصورة على ما أعتقد.
لقد قمت للتو بتحميل صورة رمزية جديدة على الخادم التجريبي (يعمل بالإصدار 3.3.0beta1). تم تحميلها، وظهرت في المعاينة، ولكنها فشلت مرة أخرى في التحميل.
/var/www/discourse/app/models/optimized_image.rb:81: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:73:in `create_for'
/var/www/discourse/app/models/upload.rb:130:in `get_optimized_image'
/var/www/discourse/app/controllers/user_avatars_controller.rb:218:in `get_optimized_image'
/var/www/discourse/app/controllers/user_avatars_controller.rb:136:in `show_in_site'
/var/www/discourse/app/controllers/user_avatars_controller.rb:89:in `block (2 levels) in show'
/var/www/discourse/lib/hijack.rb:64:in `instance_eval'
/var/www/discourse/lib/hijack.rb:64:in `block in hijack'
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:115:in `block in do_work'
rails_multisite-5.0.1/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-5.0.1/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'
هذا من السجل.
رسالة السجل لذلك هي:
لم يتم العثور على الملف في المتجر الموجود على العنوان: //ourbucket.s3.dualstack.eu-central-1.amazonaws.com/original/3X/0/2/02832e36e27bbad791fda46e2290df31e5ee2dda.jpeg
(تم تعديل الرابط حتى لا يعمل، على الرغم من أن الرابط الحقيقي يعمل)
عبارة ‘block in hijack’ هي ما يربكني.
نحن نعمل خلف Cloudflare على النظام المباشر. النظام التجريبي هو “DNS فقط” وبالتالي لا يمر عبر Cloudflare بشكل واضح. كانت لدينا بعض المشكلات مؤخرًا مع الروبوتات على الموقع الرئيسي، وقد لعبنا قليلاً مع مرشحات Cloudflare.
ولكن لماذا قد يكون جلب البيانات من عنوان URL على amazonaws.com مشكلة بالنسبة لذلك - ومرة أخرى، النظام التجريبي لا يمر عبر Cloudflare على الإطلاق.
أنا عالق حقًا في هذه المشكلة. يبدو أنها تؤثر على كل من المنتديات الحية والتجريبية - المنتدى المباشر لا يزال على إصدار أقدم والمشكلة لا تبدو أنها بدأت مع التحديث ولكنها ظهرت قبل أيام قليلة دون حدوث أي تغييرات ملحوظة.
إذًا ما يحدث هو أن Discourse يقوم بتحميل صور رمزية مخصصة جديدة بشكل صحيح إلى S3، ويضع قوائم التحكم في الوصول عليها على ما يبدو بشكل صحيح والملفات متاحة أيضًا للوصول العام من خلال عنوان URL الذي يحاول Discourse استخدامه لسحبها إلى وكيل الصور الرمزية - ومع ذلك يفشل في القيام بذلك (انظر تتبع المكدس أعلاه).
هل لدى أي شخص لديه معرفة جيدة بكيفية عمل وكيل الصور الرمزية أي فكرة أو يمكنه استخلاص أي شيء من تتبع المكدس هذا؟
لقد قمت بتنزيل عنوان URL للصورة من الخوادم وجميعها تعمل بشكل جيد - لذلك لا يوجد شيء هناك قد يمنع الوصول إلى عنوان URL هذا.
آه نعم، آسف إذا كان ذلك غير واضح. يمكنني الوصول إليها من المتصفح (لذلك افترضت توفرها العام) وكذلك من الخادم (لاستبعاد أنها مشكلة من نوع ما يواجهها الخادم في الحصول عليها. إنها حقًا مجرد خلل في الخطاب لسبب ما (انظر تتبع المكدس أعلاه).
هل وجدت حلاً لمشكلتك؟ نحن نواجه نفس المشكلة بالضبط على الإصدار 3.2.1. تم حظر جميع الوصول العام إلى الدلو، ومع ذلك كان لا يزال يعمل عبر عناوين URL الموقعة مسبقًا. الآن أواجه نفس الخطأ بالضبط:
لم يتم العثور على الملف في المتجر الموجود على العنوان: