صفحة ترقيات فارغة تمامًا

صفحة الترقيات الخاصة بي فارغة تمامًا.

نفذت الأمر ./launcher rebuild app وتمكنت من الترقية إلى الإصدار v2.6.0beta4، ولكن حتى بعد ذلك، ظلت صفحة الترقيات فارغة. وعلامة <body> للصفحة هي:

<body class="highlighter-context">


</body>

هل لديك أي اقتراحات؟

هل يمكنك مشاركة رابط موقعك؟

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

إنه منتدى مغلق. يسعدني المشاركة، لكنني أعتقد أن هذا الأمر يُحدث فرقًا، أليس كذلك؟

أنصحك بإزالة جميع الإضافات من جهات خارجية وإعادة البناء. كما يمكنك تجربة الوضع الآمن، راجع:

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

شكرًا لك. حصلت على بعض الوقت لتجربة هذه الخيارات. لم تساعد الخيارات المختلفة في الوضع الآمن. كما أن تعطيل جميع الإضافات التابعة لجهات خارجية وإدراج docker_manager فقط لم يغيّر شيئًا. لا يزال هناك شاشة بيضاء فارغة.

رأيت منشورًا بنفس المشكلة من أوائل هذا العام، لكن صاحب المنشور توقف عن الرد، لذا لا يوجد سبب أو حل واضح.

أنصحك بنسخة محذوفة من ملف app.yml الخاص بك… سيساعدنا ذلك في معرفة ما الخطأ.

حسناً، ها هو:

## هذا قالب حاوية Docker المستقلة الشاملة لـ Discourse
##
## بعد إجراء أي تعديلات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كُن حذراً جداً عند التعديل!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البادئة أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف عند الحاجة

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.socketed.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد لـ Discourse مشاركة منفذ مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
#  - "80:80"   # http
#  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## اضبط db_shared_buffers إلى أقصى 25% من إجمالي الذاكرة.
  ## سيتم تعيينه تلقائياً بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوز ذلك
  db_shared_buffers: "128MB"

  ## يمكن أن يحسن أداء الفرز، لكنه يزيد من استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي إصدار Git يجب أن تستخدم هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة وأنوية المعالج.
  ## سيتم تعيينه تلقائياً بواسطة bootstrap بناءً على المعالجات المكتشفة، أو يمكنك تجاوز ذلك
  UNICORN_WORKERS: 2

  ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
  ## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
  DISCOURSE_HOSTNAME: <تمت إزالته للنشر العام>

  ## قم بإلغاء التعليق إذا كنت تريد تشغيل الحاوية بنفس اسم النطاق
  ## (-h option) كما هو محدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل ستُجعل مدراء ومطورين
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: <تمت إزالته للنشر العام>

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  ## عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
  ## تحذير: قد يتسبب حرف '#' في كلمة مرور SMTP في مشاكل!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: <تمت إزالته للنشر العام>
  DISCOURSE_SMTP_PASSWORD: <تمت إزالته للنشر العام>
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)

  ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  LETSENCRYPT_ACCOUNT_EMAIL: <تمت إزالته للنشر العام>

  ## عنوان CDN http أو https لهذه النسخة من Discourse (مُهيأ للسحب)
  ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  # إعداد S3
  DISCOURSE_CDN_URL: <تمت إزالته للنشر العام>
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <تمت إزالته للنشر العام>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <تمت إزالته للنشر العام>
  DISCOURSE_S3_CDN_URL: <تمت إزالته للنشر العام>
  DISCOURSE_S3_BUCKET: <تمت إزالته للنشر العام>
  DISCOURSE_S3_BACKUP_BUCKET: <تمت إزالته للنشر العام>
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## حاوية Docker لا تحتفظ بالحالة؛ تُخزن جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## تذهب الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-user-notes
          - git clone https://github.com/discourse/discourse-assign
          - git clone https://github.com/discourse/discourse-policy
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/discourse/discourse-saved-searches
          - git clone https://github.com/discourse/discourse-knowledge-explorer
          - git clone https://github.com/discourse/discourse-voting
          - git clone https://github.com/discourse/discourse-translator
          - git clone https://github.com/angusmcleod/discourse-elections
          - git clone https://github.com/discourse/discourse-styleguide
          - git clone https://github.com/Ahmedgagan/discourse-custom-trust-level
          - git clone https://github.com/paviliondev/discourse-quick-messages
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-calendar

  # تخزين الكائنات
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - su discourse -c 'bundle exec rake s3:upload_assets'

## أي أوامر مخصصة للتشغيل بعد البناء
run:
  - exec: echo "بداية الأوامر المخصصة"
  ## إذا كنت تريد تعيين عنوان البريد الإلكتروني 'From' لأول تسجيل، قم بإلغاء التعليق وتغيير:
  ## بعد الحصول على أول بريد إلكتروني للتسجيل، أعد التعليق على السطر. يجب تشغيله مرة واحدة فقط.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "نهاية الأوامر المخصصة"

حسنًا… الخطوة الأولى التي أنصح بها هنا هي إعادة بناء هذا النظام دون أي إضافات من جهات خارجية. احتفظ فقط بتلك التي تبدأ بـ /discourse/discourse

بعد ذلك، إذا نجح الأمر، يمكنك استخدام طريقة البحث الثنائي لتحديد الإضافة التي تسبب المشكلة.

حسناً، إضافة docker_manage ليست مساراً من نوع discourse/discourse، ولكن عند تعطيلها، لا توجد صفحة ...admin/upgrade.

تفعيل إضافة docker_manage فقط يؤدي إلى ظهور صفحة الترقية الفارغة نفسها.

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

GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub ؟

عذراً، أنت محق، يجب أن أكون قد تخيلت. تجاهل ذلك، فهو موجود في مسار discourse/.

لكن على أي حال، لا يزال هناك شاشة بيضاء فارغة.

مع توفر الإصدار 2.6.0.beta5 (أنا أستخدم حاليًا 2.6.0.beta4)، لا يزال لدي صفحة ترقية فارغة. سأكون ممتنًا لأي نصيحة إضافية، حيث حاولت تعطيل الإضافات دون جدوى.

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

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

شكرًا لك، أنت محق—it يرفض تحميل سكريبت قادم عبر CDN الخاص بي. مع تنظيف الروابط:

`upgrade:1 تم رفض تحميل السكريبت ‘https://cdn-to-discourse.b-cdn.net/assets/docker-manager-app-32418f2f7cd50e6f4a0b8d13badc4e59f6a1ad74e7bed270f3a051478fed773d.js’ لأنه ينتهك توجيه سياسة أمان المحتوى التالي: “script-src https://forum.example.com/logs/ https://forum.example.com/sidekiq/ https://forum.example.com/mini-profiler-resources/ https://cdn-to-s3.b-cdn.net/assets/ https://cdn-to-s3.b-cdn.net/brotli_asset/ https://forum.example.com/extra-locales/ https://cdn-to-discourse.b-cdn.net/highlight-js/ https://cdn-to-discourse.b-cdn.net/javascripts/ https://cdn-to-discourse.b-cdn.net/plugins/ https://cdn-to-discourse.b-cdn.net/theme-javascripts/ https://cdn-to-discourse.b-cdn.net/svg-sprite/ https://matomo.example.com”. لاحظ أنه لم يتم تعيين ‘script-src-elem’ صراحةً، لذا يتم استخدام ‘script-src’ كبديل.

تقول صفحة إعدادات الأمان: “المضيف الحالي و CDN مضمنان افتراضيًا.” هل يجب أن أضيف CDN إلى القائمة البيضاء يدويًا على أي حال؟

أرى أن نفس المشكلة تم طرحها هنا، دون وجود إجابة نهائية حول سبب عدم عمل القائمة البيضاء الافتراضية.

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

مرحباً،

أعتقد أنه يجب عليك إضافة هذا الرابط إلى إعدادات CSP في لوحة الإدارة (مصدر السكريبت في سياسة أمان المحتوى):

https://cdn-to-discourse.b-cdn.net/assets/

ثم قم بفحص أخطاء أدوات مطوري Chrome مرة أخرى.

نعم، هذا يعمل. أنا أتساءل لماذا لا يقوم الفلترة البيضاء الافتراضية بذلك تلقائيًا.

أنا أيضًا فضولي، كيف تم إعداد CDN الخاص بك؟ قد نفتقد بعض السحر من إضافة docker-manager.

cc @pmusaraj

4 إعجابات

نعم، بالفعل، كنا كذلك. كانت إضافة docker_manager تقوم بتحميل ملفين JS في قالب باستخدام javascript_include_tag، والتي لا تدرك DISCOURSE_S3_CDN_URL، لذا كانت تعتمد افتراضيًا على DISCOURSE_CDN_URL مما تسبب في تعارض مع سياسة CSP.

يجب أن يكون الأمر قد تم إصلاحه الآن عبر FIX: blank upgrade page when using S3 CDN and CSP · discourse/docker_manager@3d37fd6 · GitHub

@paulrudy إذا قمت بتحديث إضافة docker_manager، فلن تحتاج بعد الآن إلى إضافة https://cdn-to-discourse.b-cdn.net/assets/ يدويًا إلى سياسة CSP الخاصة بك.

6 إعجابات

هذا ما كان مطلوبًا! شكرًا لك @sam و @pmusaraj

4 إعجابات