خطأ Discourse_docker (blocked:csp) مع svg-sprite عند استخدام المجلدات الفرعية

لا تتردد في زيارة https://sales-community-staging.rainmakers.co/sales-community/ لمشاهدة المشكلة. لا توجد ضمانات بأن الرابط سيبقى نشطًا إلى الأبد.
أعتقد أن السبب هو عدم إضافة /sales-community إلى الرابط.
أخبرني إذا كان توفير ملف app.yml أو nginx.conf سيكون مفيدًا.
هذا على version: tests-passed.
جربت version: stable لإصلاح المشكلة، لكنه لا يتم تجميعه على Docker حاليًا (تم ذكر ذلك في تقرير خطأ آخر رأيته سابقًا؛ لقد كنت أبدأ من جديد، وليس التراجع عن الإصدار).

هل يمكن لأحد أن يمنحني القدرة على نشر أكثر من صورة واحدة :slight_smile:

إعجاب واحد (1)

هل اتبعت دليل كيفية استخدام المجلدات الفرعية؟

نعم. كل شيء آخر يعمل (النشر، رسائل البريد الإلكتروني، تحميل الصور الرمزية، HTTPS، إلخ). جميع الموارد الأخرى لديها عناوين URL صحيحة في مجلد فرعي /sales-community (كما هو موضح في الصورة). فقط ملف SVG معطل.

# app.yml

أشياء...

DISCOURSE_HOSTNAME: sales-community.rainmakers.co
DISCOURSE_RELATIVE_URL_ROOT: /sales-community

أشياء...

run:
    - exec:
        cd: $home
        cmd:
          - mkdir -p public/sales-community
          - cd public/sales-community && ln -s ../uploads && ln -s ../backups
    - replace:
       global: true
       filename: /etc/nginx/conf.d/discourse.conf
       from: proxy_pass http://discourse;
       to: |
          rewrite ^/(.*)$ /sales-community/$1 break;
          proxy_pass http://discourse;
    - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: etag off;
       to: |
          etag off;
          location /sales-community {
             rewrite ^/sales-community/?(.*)$ /$1;
          }
    - replace:
         filename: /etc/nginx/conf.d/discourse.conf
         from: $proxy_add_x_forwarded_for
         to: $http_your_original_ip_header
         global: true

نعم، إذن المشكلة ليست في سياسة محتوى الأمان (CSP) لأن الرابط خاطئ ببساطة؛ يبدو أنه لا يتم إضافة بادئة مسار المجلد الفرعي إليه. أعتقد أنه يجب إضافته هنا؟

4 إعجابات

مما يثير التساؤل، هل هذه مشكلة في مجلد فرعي @eviltrout؟

لدينا بالفعل جميع المنطق المطلوب لـ SVG sprites في سيناريوهات المجلدات الفرعية، وقد تم استخدامه بنجاح من قبل عدد من المواقع. في هذه الحالة، واجهنا حالة حافة محددة جدًا. عند فحص المتغيرات الرئيسية في موقع @vkozyrev (في وحدة تحكم المتصفح):

> Discourse.SvgSpritePath
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"
> Discourse.BaseUri
"/sales-community"

يبدو كل شيء على ما يرام. الآن، عند تحميل ورقة SVG sprite، نستخدم loadScript، الذي بدوره يستدعي Discourse.getURL. هذه الدالة مسؤولة عن إضافة بادئة المجلد الفرعي. لنجرب ذلك:

> Discourse.getURL(Discourse.SvgSpritePath)
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"

هاه… لم يفعل ذلك شيئًا. رابط عشوائي آخر يعمل بشكل صحيح:

> Discourse.getURL("/blah")
"/sales-community/blah"

بحثًا أكثر قليلًا يكشف عن هذا السطر داخل getUrl

if (url.indexOf(Discourse.BaseUri) !== -1) return url;

أو، باللغة العربية: “إذا كان الرابط يحتوي بالفعل على بادئة المجلد الفرعي، توقف”. إذن المشكلة هنا هي أن بادئة المجلد الفرعي الخاصة بـ @vkozyrev (/sales-community) مدمجة في منتصف رابط ورقة SVG sprite

/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js

لقد جعلت الفحص أكثر تحديدًا، بحيث يتحقق فقط من وجود بادئة المجلد الفرعي في بداية الرابط:

رغم أن هذا يدفعني للتفكير في مشاكل محتملة أخرى… على سبيل المثال، إذا أراد شخص ما أن تكون بادئة المجلد الفرعي الخاصة به /t أو /about، أو أي رابط آخر نستخدمه في Discourse :thinking:

10 إعجابات

@vkozyrev تم الدمج الآن، لذا يرجى تحديث موقعك وإخبارنا إذا تم حل المشكلة :slight_smile:

تم حل المشكلة @david.

هذه حالة حافة مذهلة :smiley:. أقوم بتطوير Rails (في وضع الـ API فقط)، وسعيد لأنني لم أغوص كثيرًا فيrabbit hole، وإلا لكنت ضللت في كود العميل.

في حال كنت فضوليًا، لدي وكيل (proxy) أمام هذا، لذا فإن النطاق الفرعي sales-community مخفي عن المستخدمين، سيرىون فقط /sales-community في بداية عنوان URL للموقع الرئيسي. الموقع الرئيسي مستضاف على Heroku، لذا لا يمكنني استخدام مثيل nginx واحد لتوجيه كل شيء.

شكرًا لكم جميعًا على الردود السريعة والإصلاح!

6 إعجابات