نفس المشكلة هنا. لدينا ملفات JS تعمل داخل برنامجنا الخاص، ولا شيء منها قد يفعل أي شيء في المتصفح.
تمكنا من حل مشكلة تحميل Discourse بنقل جميع الملفات المرفوعة إلى سلة تخزين S3 وتعيين s3_use_cdn_url_for_all_uploads إلى true. هذا يتجاوز بشكل أساسي وحدة تحكم الروابط القصيرة التي تبدو أنها العائق الرئيسي أمام ملفات JS.
التفاصيل (من مساعدي الذكي الذي رافقني في هذه العملية):
- إعداد تخزين متوافق مع S3 (مثل Cloudflare R2)
لا يمكن لـ Discourse تقديم ملفات .js بأمان من القرص المحلي. انقلها إلى سلة تخزين.
-
السلة: أنشئ سلة خاصة (مثل
my-discourse-bucket). -
مفاتيح API: أنشئ مفتاح وصول ومفتاح سري.
2. تكوين نطاق CDN مخصص
في Cloudflare (أو مزود الخدمة لديك)، اربط نطاقًا مخصصًا بسلة التخزين (مثل cdn.example.com). يضمن ذلك تقديم الملفات كعناصر ثابتة عبر رابط مباشر، متجاوزًا “حارس الأمان” في Discourse.
3. تحديث إعدادات Discourse
في الإدارة → الإعدادات، قم بتكوين تفاصيل S3 الخاصة بك. من الأهمية بمكان، قم بتفعيل الخيارات التالية لضمان عدم محاولة Discourse “توقيع” الروابط باستخدام رؤوس مؤقتة قد تسبب تعطلًا:
-
s3_use_cdn_url_for_all_uploads: قم بتفعيل هذه المربع (هذه هي الخطوة الأهم). -
s3_cdn_url: اضبطه علىhttps://cdn.example.com. -
s3_region: استخدمus-east-1(للتوافق مع R2).
4. نقل الملفات المرفوعة الحالية (اختياري)
ملاحظة: هذا لم ينجح معنا لأسباب غير معروفة.
لإصلاح الروابط القديمة في المنشورات الموجودة، ادخل إلى الحاوية وقم بتشغيل:
Bash
# داخل /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake
أتمنى أن يفيد هذا شخصًا ما.