تستخدم تنفيذ عامل الخدمة الجديد في workbox دالة UrlHelper.absolute. وبما أن هذا أصل مُجمَّع، فإنه يخزن عنوان URL الكامل، الذي يحتوي على اسم النطاق الكامل للمضيف الرئيسي في بيئة متعددة المواقع.
نعم، importScripts و modulePathPrefix، في السطور 3 و6 من ملف ERB ذلك.
لكنك لم تفهمني تمامًا. المشكلات تحدث في الأماكن التي لا يوجد فيها أي CDN في مجموعة مواقع متعددة.
كلا الدالتين UrlHelper.absolute و UrlHelper.local_cdn_url يمكنهما التعامل مع الحالات التي يوجد فيها CDN وتلك التي لا يوجد فيها.
absolute:
بدون CDN: https://primarysite.ofmultisitecluster.com/javascripts/workbox/workbox-sw.jsسيء - مصدر بعيد لجميع المواقع ما عدا الموقع الرئيسي، مما يعرض اسم المضيف للمجموعة الرئيسية
مع CDN: //cdnurl/javascripts/workbox/workbox-sw.js
local_cdn_url:
بدون CDN: /javascripts/workbox/workbox-sw.jsجيد - رابط نسبي
مع CDN: //cdnurl/javascripts/workbox/workbox-sw.js
المشكلة هي أن هذين السطرين (3 و6) لا يتعلقان بملف عامل الخدمة.
يأتي عامل الخدمة من النطاق الأساسي (حيث لا يمكن تقديمه عبر شبكة توصيل المحتوى)، لكن هذا العامل يستورد البرامج النصية بشكل كسول أثناء وقت التشغيل (في هذه الحالة ملفات مكتبة workbox)، ويمكن تقديم هذه الملفات عبر شبكة توصيل المحتوى.
إذن، المشكلة هي أن مجموعة المواقع المتعددة (multisite cluster) الخاصة بك لا تحتوي على شبكة توصيل محتوى مُهيأة، وهذا ما يكشف عن هذا الخطأ، الذي يتم إخفاؤه عند تعيين DISCOURSE_CDN. أردت فقط معرفة السبب في أنه لا يؤثر علينا.
اسم المتغير هنا current_hostname عند السطر 288 يُشير بقوة إلى شيء يدرك تعدد المواقع
ومن خلال:
يبدو أنه كذلك. طريق مسدود حتى الآن…
بالبحث في أماكن أخرى، حصل هذا المسار على بعض المعالجة الخاصة لأن المتصفحات تحب أن تضغط عليه بشدة، ولا يُسمح لنا بوضعه على CDN وجعل المشكلة مشكلة شخص آخر. أثناء القيام بذلك، كان لدينا خطأ يتعلق بتسرب في بيئة المواقع المتعددة، تم إصلاحه بواسطة @sam قبل عام:
هل هناك احتمال أن الطريقة التي تقدم بها هذه المجموعة من المواقع المتعددة تقوم بتخزين هذا المسار في ذاكرة التخزين المؤقت بطريقة تسمح بالتسرب، مثلما كنا في أوائل عام 2018؟
لا، المشكلة هي أنها تفعل ذلك عند تجميع الأصول مسبقًا، مما يصبح مشكلة في بيئة المواقع المتعددة.
لذلك الحل هو عدم تضمين اسم المضيف في الأصول أبدًا (إلا إذا كان هناك CDN للأصول تم تعيينه، حيث أنه يُشارك دائمًا بين مستضيفات المواقع المتعددة على أي حال).
لكن.. فقط للتأكد.. لست متأكدًا من كيفية تعاملكم مع الأصول على شبكة توصيل المحتوى (CDN) بالاقتران مع مجلد فرعي، ولكن إذا استخدمتم Discourse.asset_host، فهل لا تزالون تضيفون بادئة المسارات جميعها على مضيف الأصول مع مسار المجلد الفرعي أيضًا؟ لأن هذا ما يفعله الكود حاليًا.
إذا كان هذا هو ما تفعلونه، فيمكنكم تجاهل هذه الفقرة تمامًا
أدى هذا الأمر المتعلق بالمجلد الفرعي + شبكة توصيل المحتوى (CDN) إلى تسببه في العديد من المشكلات بالفعل. قام @featheredtoast ببعض العمل لتبسيط هذا الأمر، وقضينا وقتًا طويلاً في التأكد من أن جميع أكواد تقديم الأصول لدينا تعمل بشكل صحيح مع هذه المجموعات الغريبة من الدلاء والمجلدات الفرعية وما إلى ذلك.
أعتقد أننا بأمان ، ولكن إذا لزم الأمر، يمكننا إعادة فتح هذا الموضوع.