رفع الأصول إلى S3 بعد الترقية داخل المتصفح

بعد نقل صور وموارد موقعي (js) إلى S3، حاولت ترقية المنتدى باستخدام واجهة /admin/upgrade. تمت الترقية بنجاح، لكن يبدو أن الموارد لم تُحمّل إلى حوض S3، مما جعل موقعي غير متاح حتى قمت بإعادة بناء التطبيق من خلال shell. هناك خطاف (hook) يقوم بذلك نيابةً عني. سيكون من الرائع وجود مثل هذه الوظيفة في واجهة الويب أيضًا. لا أعرف ما إذا كانت موجودة بالفعل، وإذا كانت كذلك، أرجو إخباري. :slight_smile: ``` yaml
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets

لا، لا يمكنك نقل الأصول إلى S3 من لوحة الإدارة. سيتعين عليك القيام بذلك عبر SSH لأن هناك مهام إضافية مطلوبة في وقت هذا النقل، ما لم تكن تقوم بذلك في تثبيت جديد.

آه، فهمت. لقد أعجبتني طريقة الترقية السلسة دون توقف حتى انتقلت إلى S3. هل توجد طريقة لعدم تقديم ملفات JavaScript عبر S3 وتقديم الصور فقط من خلاله؟

لا يمكنك تقديم ملفات JS عبر S3. يمكنك فقط تحميل وتقديم الوسائط (مثل الصور والمستندات والفيديوهات وما إلى ذلك) عبر S3.

أما ملفات JS، فتحتاج إلى شبكة توصيل محتوى (CDN) مثل CloudFront.

نعم، أنا لا أقوم بتقديم ملفات JS مباشرة من S3، بل يتم تخزينها في S3 ثم تقديمها عبر CDN. ما أردت السؤال عنه هو: هل يمكنني تخزين ملفات JS محليًا وتقديمها عبر CDN، مع تخزين الوسائط فقط في S3؟

أنت تخطئ مرة أخرى.
من المفترض أن يتم تقديم Discourse JS مباشرة عبر CDN، مع كون تثبيت Discourse هو المصدر الأصلي. لا أعرف كيف ستضع JS في S3، لكن ضع في اعتبارك أن JS يتم إعادة توليده عند إعادة البناء. أي شيء تخدمه عبر S3 سيكون قديمًا على الأرجح، وستدعو المزيد من المتاعب.

بدأت المشكلة بعد أن قمت بإعداد خيارات S3 متبّعةً هذا الرابط: Configure an S3 compatible object storage provider for uploads

ولهذا السبب أضافوا خطاف after_assets_precompile لرفع الأصول المُحدّثة إلى S3.

كيف يمكنني إصلاح هذا؟ إذ تُرجع استجابة 404 إذا حاولت الوصول إلى أي أصل عبر الخادم المحلي. يجب أن يكون الوصول عبر S3. وإلا لكنتُ أضفت قاعدة توجيه على الحافة (edge routing rule) في شبكتي CDN لسحب طلبات الأصول عبر النطاق المحلي.

إذا قرأت عنوان المنشور، فهو يقول “تخزين الكائنات للمرفقات”، وهذا كافٍ في العنوان.

ماذا تقصد بالنطاق المحلي؟ أين تم تثبيت Discourse؟

بمعنى النطاق المحلي، كنت أقصد الخادم الذي تم تثبيت discourse عليه، مثل ملفات js التي كانت محلية لخادم nginx وليست على s3.

للأسف، الموضوع المذكور لا يفعل ذلك، حتى وإن كان يُسمى بالفعل “استخدام التخزين الكائني لـ التحميلات”. إذا قمت بإعداد منتداك وفقًا للتعليمات في ذلك الموضوع، فسيُطلب منك دفع الأصول إلى S3.

كيف يمكنني تكوينه بطريقة تسمح لي بالاحتفاظ بملفات JS على خادم تثبيت Discourse؟