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