توقف عن استخدام Amazon S3 للتحميلات

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

هل يمكنك تأكيد أنك قمت بنسخ جميع الملفات بشكل صحيح؟

إعجابَين (2)

نعم، أفهم تمامًا وقد تأكدت من أن المسارات النسبية الخاصة بها تبقى كما هي تمامًا.

على سبيل المثال، إذا كان ملف موجودًا سابقًا في:
//bucket1/uploads/original/2x/f/filename.jpg
والآخر في:
//bucket2/uploads/original/1x/a/filename.png

فإنهما الآن موجودان أيضًا في:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg و ../original/1x/a/filename.png

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

وبعد أن قمت بنسخ (وليس نقل) جميع محتويات الدلو إلى الموقع المذكور أعلاه على الخادم المحلي (مع الحفاظ على المسارات النسبية)، وأصدرت الأمر:
discourse remap:oldurl-or-path new-url-or-path،

لم يحدث أي تغيير مرئي على الموقع. لكنني بعد ذلك أصدرت الأمر:
rake posts:rebake،

عندها اختفت حتى أيقونات الصور الخاصة بي، ولم يظهر أي رابط/مسار عند تمرير مؤشر الفأرة فوق المكان الفارغ في عنصر نائب للصورة.

آمل أن تكون قد زودتني بتفاصيل كافية.

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

في هذه الحالة، أعتقد أن ما يلي سيحل مشكلتك.

    ./launcher enter app
    discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    rake posts:rebake
إعجاب واحد (1)

شكرًا لك يا جي.

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

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

يجب عليك توفير المسار الصحيح عند إعادة تعيين الروابط، وإلا فقد يتعطل النظام. لقد قمت بإعادة تعيين رابط S3 يدويًا بناءً على مخرجات العينة التي قدمتها سابقًا، وهو يعمل.

صورة مستضافة في الدلو:

https://bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

نفس الصورة مستضافة على خادمك المحلي:

https://bathindahelper.com/uploads/default/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

يمكنك فتح الصورة في علامة تبويب جديدة لرؤية روابط كلتا الصورتين أعلاه. لذا، أفترض أن هذا سيعمل.

 ./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

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

شكرًا لك مجددًا.

لقد نقرت بزر الماوس الأيمن على الصورة (الأولى)، وكان المسار الذي ظهر في شريط العنوان غير تابع لدلو التخزين الخاص بي:

نفس الأمر ينطبق على الصورة الثانية.

يمكنك التحقق من منشور واحد كمثال من موقعي الإلكتروني هنا (المنشور مكتوب باللغة الهندية، لكن يمكنك بسهولة العثور على أيقونة الصورة الصغيرة في وسط المنشور). تظهر الصورة الكاملة فقط عند النقر على الأيقونة الصغيرة.

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

إعجابَين (2)

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

إعجابَين (2)

لا يوجد أي involvement من Cloudflare {تعديل: CloudFront} (أو أي شبكة توصيل محتوى أخرى) من جهتي لموقعي الإلكتروني منذ حوالي عامين.

قد تكون الصور الموجودة على Meta مخزنة على Cloudflare.

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

ليس Cloudflare. إنه CloudFront. هل قمت بمسح ذاكرة التخزين المؤقت للمتصفح؟

إعجابَين (2)

نعم، كلاودفرونت (عذراً).

نعم، قمت بذلك. علاوة على ذلك، قمت بفتح هذا الموضوع في وضع التصفح الخاص بمتصفح فايرفوكس.

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

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

إعجابَين (2)

مرحبًا، لقد أخطأنا في فهم CloudFront هنا. في الواقع، يقوم meta discourse بتخزين الصورة مؤقتًا. هذا خطأ مني.

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

لم أستخدم CloudFront (أو أي شبكة توصيل محتوى أخرى) في AWS أو في الواجهة الأمامية. على الرغم من أنني استخدمت CloudFlare لمدة شهر تقريبًا قبل عامين، ثم أزالتها نهائيًا.
كما أنني لم أختار CloudFront في AWS. لذا لا يوجد أي سؤال ينشأ هناك أيضًا.

علاوة على ذلك، على جهاز الكمبيوتر الخاص بي، عند فتح الصور، تظهر عناوين دلو AWS، وليس أي شبكة توصيل محتوى أخرى.

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

لقد أسأت فهم CloudFront هنا. في الواقع، قام meta discourse بتخزين الصورة مؤقتًا. لقد عدلت منشوري السابق. تفضل بالنظر.

إعجابَين (2)

أنت تقترح فقط إعادة تعيين مسارات الصور (من عنوان URL في سلة S3 إلى مسار الخادم المحلي). ثم إعادة المعالجة.

ولكن كما ذكرت سابقًا، لقد قمت بذلك بالفعل ووجدت أن ذلك يفاقم المشكلة. (علاوة على ذلك، بعد إعادة المعالجة، لا يعمل خيار “استعادة” أيضًا، ويصعب التراجع).

هل هناك أي فكرة مفيدة أخرى من فضلك؟

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

عندما قمت بإعادة التوجيه، هل أنت متأكد من أن المسارات مطابقة لما يلي؟

discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/

ما هو المسار الذي حددته عند إعادة التوجيه؟

لقد قدمت لك مثالاً في منشور سابق وقد نجح. ولا أعرف أي طريقة أخرى.

إعجابَين (2)

سأحاول مرة أخرى، مع بذل أقصى قدر من العناية الممكنة.
لكنني كنت أبحث عن طريقة تمكنني من فهم ما يحدث خلف الكواليس. على الأقل مع منشور واحد، أردت أن أرى أي المنشورات مرتبطة بأي “دلو” (bucket) وما الفوضى التي أواجهها.

على أي حال، سأحاول مرة أخرى وأبلغكم بالنتيجة هنا. شكرًا لكم مرة أخرى.

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

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

./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)

شكرًا لك

إعجابَين (2)

لست أكثر ذكاءً منك، لكنني مررت بهذه العملية فقط - وتمكنت من الخروج منها بمساعدة @Pravi.

الخطوات التي تحتاج إلى اتخاذها للانتقال من تحميل S3 إلى الحالة الافتراضية (Vanilla)

هذه العملية ليست سهلة للغاية - احرص كل الحرص على النصوص والروابط، لأن الأمر سيصبح فوضويًا للغاية إذا أخطأت في أي خطوة. ومع ذلك، فهي قابلة للتنفيذ تمامًا.

الخطوة 1 - انسخ الملفات من حوض S3 الخاص بك إلى مجلد public/uploads/default

أولاً، قم بتثبيت AWS CLI داخل حاوية التطبيق

cd /var/discourse
./launcher enter app
sudo apt install awscli

قم بتكوين AWS باستخدام معرف S3 وكلمة المرور (عادةً ما تكون عملية مباشرة)

aws configure

ثم استخدم aws لنسخ كل محتوى الحوض إلى public/uploads/default/

aws s3 sync s3://my-bucket-name/ public/uploads/default/

الخطوة 2 - إعادة تعيين رابط S3

أسهل طريقة للقيام بذلك هي العثور على صورة في المنتدى الخاص بك وفحص الرابط. تريد كل جزء حتى اسم الملف الفعلي (بما في ذلك آخر /):

discourse remap //the-long-url-in-your-images-until-the-filename /uploads/default/

الخطوة 3 - إعادة معالجة المنشورات وإعادة بناء التطبيق:

rake posts:rebake
exit
./launcher rebuild app

الخطوة 4 - إيقاف تشغيل S3

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

أوه! تم. حتى الآن لم أواجه أي مشاكل. اذهب واختبرها!

10 إعجابات

عمل رائع! أعتقد أن هذه هي الخطوات التي ساعدتني في النهاية على النجاح، لكنني قمت بعدد كبير من إعادة تعيين الخرائط المختلفة التي لم تكن فعالة بنفس القدر! من الرائع وجود تعليمات رسمية.

4 إعجابات