لقد اطلعت على العديد من المواضيع بحثًا عن إجابات - ووجدت الكثير منها (مدرجة أدناه - شكراً لكم!). بفضل هذه المواضيع، يمكنني جعل الأمور تبدو كما أريد في الغالب. ولكن لا يزال هناك سؤال واحد لم أتمكن من حله.
يتعلق بملفات الأصول المضمنة، وتحديداً ملف embed_HASH.css.
يبدو أنه عند بناء هذه الأصول، لا يتم تجميعها باستخدام لوحة الألوان الخاصة بالمظهر النشط. قد يكون هذا مقصودًا، أو قد يكون شيئًا فاتني.
إليك ما أود الحصول على توضيح بشأنه:
هل يتم بناء embed_[digest].css دائمًا باستخدام اللوحة الافتراضية؟
إذا كان الأمر كذلك، يمكنني التعامل مع ذلك - أعرف أن هناك الكثير من العمل المستمر لتحسين كيفية التعامل مع المظاهر ولوحات الألوان في Discourse.
إذا كان يمكن بناؤه بلوحة مخصصة، فكيف يمكنني تفعيل هذا السلوك؟
لاحظت أنه يمكن بناؤه باستخدام لوحات النظام الفاتحة أو الداكنة، لذلك يبدو من المعقول استخدام لوحة مخصصة - لكنني لم أتمكن من إنشاء ملف تضمين فاتح أو داكن بشكل يمكن التنبؤ به.
لاختبار ذلك، قمت بحذف جميع المظاهر ولوحات الألوان، وأعدت كل شيء إلى المظهر الافتراضي الفاتح، ثم قمت بتشغيل:
… متوقعًا الحصول على ملف embed_HASH.css بمظهر فاتح. لكن النتيجة بدت وكأنها لا تزال تستخدم الأنماط الداكنة.
لست على دراية عميقة بالتفاصيل الداخلية، لذلك قد أكون أغفل شيئًا واضحًا. إذا كان بإمكان أي شخص مشاركة ما هو مطلوب حتى يتم بناء embed_HASH.css بلوحة يمكن التنبؤ بها، فسيكون ذلك مفيدًا حقًا.
شكراً مقدماً!
للعلم، مثيل Discourse الخاص بي يعمل في Docker وهو محدث. لقد استخدمت البرنامج النصي launcher والقالب المستقل.
قراءة ذات صلة (يُسمح برابطين فقط للحسابات الجديدة، الثالث هو عنوان قابل للبحث):
لقد وجدت إجابة جزئية لسؤالي وأردت مشاركة هذه الرؤية:
ملف embed_[digest].cssيتم بناؤه باستخدام لوحة الألوان المحددة للموضوع النشط.
المشكلة، كما أدركت، ناتجة عن التخزين المؤقت لردود HTTP شديد العدوانية.
ما زلت آمل أن يتمكن شخص ما من الإجابة: أين يتم تخزين ردود HTTP لملفات الأصول مؤقتًا في Discourse؟
هذا ليس مجرد تخزين مؤقت من جانب المتصفح - يبدو أنه من جانب الخادم أيضًا.
عند تتبع سجل Rails الإنتاجي، ألاحظ أن الطلبات التي تحتوي على مجموعة جديدة وغير مرئية من معلمات الاستعلام فقط هي التي تؤدي إلى إعادة عرض الأصول الطازجة:
$ tail -n 50 shared/standalone/log/rails/production.log -f
Started GET "/stylesheets/embed_afe162195ad0a7185309a19d8c36036d2e53708c.css?__ws=domain.tld&foo=bif" for fd00:aaaa::f1a at 2025-06-27 01:14:38 +0000
Processing by StylesheetsController#show as CSS
Parameters: {"__ws"=>"domain.tld", "foo"=>"bif", "name"=>"embed_afe162195ad0a7185309a19d8c36036d2e53708c"}
Sent file /var/www/discourse/tmp/stylesheet-cache/embed_afe162195ad0a7185309a19d8c36036d2e53708c.css (0.2ms)
Completed 200 OK in 22ms
بعد ذلك، تعيد أي طلبات لاحقة لنفس عنوان URL (حتى مع سلاسل استعلام مختلفة) نفس الاستجابة - حتى لو تغير الموضوع الأساسي.
أرى فقط أنماط الموضوع المحدثة في المرة الأولى التي يتم فيها استخدام استعلام فريد. جميع الطلبات المستقبلية بنفس المعلمات تقدم الإصدار السابق، حتى بعد إعادة التجميع.
البرنامج النصي launcher يعيّن افتراضيًا RAILS_ENV=production، وقد تركت ذلك على حاله. يمكنني محاولة التبديل إلى RAILS_ENV=development لتعطيل التخزين المؤقت تمامًا أثناء التطوير، ولكن بشكل مثالي، أود أن أعرف:
كيف يمكننا مسح أو تعطيل التخزين المؤقت على مستوى HTTP لردود الأصول في بيئة الإنتاج؟
إذا كان لدى أي شخص رؤية حول كيفية تخزين Discourse مؤقتًا لردود هذه الأصول - أو كيفية إبطال صلاحيتها بشكل صحيح - فسيكون ذلك مفيدًا للغاية.
يا رجل لقد كان Nginx!\n\n### ملخص:\nbash\nrm -rf /var/nginx/cache/*`\n\nحل فوري!\n\n—\n\n## اختياري: تعطيل ذاكرة التخزين المؤقت لأصول Nginx\n\nقم بتحرير هذا الملف:\n\n/etc/nginx/conf.d/discourse.conf\n\n\nحول الأسطر 243-246، قم بالتعليق على توجيهات التخزين المؤقت:\n\nc\n # proxy_cache one;\n # proxy_cache_key \"$scheme,$host,$request_uri\";\n # proxy_cache_valid 200 301 302 7d;\n # proxy_cache_bypass $bypass_cache;\n\n\nثم أعد تشغيل Nginx:\nbash\nsv restart nginx\n\n\n### إذا كنت تقوم بتغيير لوحات الألوان…\n\nمجرد تحرير إعدادات الألوان في السمة لن يعيد إنشاء embed_[digest].css. لفرض Discourse على إنشاء ملفات أصول جديدة، قم بما يلي:\n\nbash\nrm tmp/stylesheet-cache/* # أو، للتضمين فقط، `rm tmp/stylesheet-cache/embed*`\n\n\n### ماذا عن RAILS_ENV=development؟\n\nقد تعتقد أن تعيين RAILS_ENV: development سيقوم بتعطيل التخزين المؤقت، ولكن:\n\n* nginx.sample.conf الذي يستخدمه Discourse لديه التخزين المؤقت ممكّن افتراضيًا، بغض النظر عن البيئة\n* هذا التخزين المؤقت غير مرتبط بـ RAILS_ENV، لذلك لن يساعد في التخزين المؤقت للأصول المضمنة\n\nلذلك، ما لم تخطط لإعادة تكوين طبقة Nginx بالكامل، فقط امسح ذاكرة التخزين المؤقت يدويًا أو قم بتعطيل تلك الأسطر، وستكون جاهزًا. بمجرد أن تكون جاهزًا للإنتاج، يمكنك التراجع عن ذلك.\n\n### ماذا عن ./launcher rebuild standalone؟\n\nبالتأكيد، إنه يعمل. ولكن إذا كنت تقوم بتعديل السمات بنشاط، أو اختبار التضمينات، أو ضبط الألوان… فستحتاج إلى شيء أسرع من الانتظار لبضع دقائق في كل مرة.\n\n### هل لديك إعداد تطوير أفضل أو إصلاحات سريعة؟ شاركنا رأيك!