Alle Plugins funktionieren nach dem aktuellen Upgrade aufgrund eines CORS-Fehlers nicht

Seit letzter Woche funktionieren alle Plugins, sowohl die Kern- als auch die installierten, nicht mehr, selbst wenn sie in unserem Forum aktiviert sind. Anfangs dachte ich, es handele sich um einen Zusammenhang mit dem zuvor erwähnten Fehler FIX: Compile missing rollup plugin bundles on demand in development - #8, doch wir haben seitdem mehrere Updates durchgeführt, ohne dass sich etwas gebessert hat. Ich habe versucht, ein zuvor ungenutztes Plugin zu aktivieren, das vorinstallierte „User Notes"-Plugin, aber es gibt keine Optionen, um für Benutzer Notizen hinzuzufügen. Selbst der Docker-Manager funktioniert nicht mehr, sodass alle Updates auf Server-Ebene durchgeführt werden müssen. Dadurch kann nur eine Person sie anwenden, statt des gesamten Admin-Teams.

Ich habe nach einer Lösung gesucht, bin jedoch nur auf allgemeine Hinweise wie „Plugins werden automatisch deaktiviert" gestoßen, nichts so Spezifisches wie in unserem Fall.

Könnte uns jemand bitte mögliche Lösungen oder Wege aufzeigen, die wir in Betracht ziehen sollten? Wir möchten gerne ein Rollback vermeiden, aber bisher sieht es so aus, als ob dies die letzte Option sein könnte.

Vielen Dank wie immer an alle hier und für Ihre kontinuierliche Unterstützung :smiley:

Hmm. Das sieht nach einem Problem mit Ihrem CDN aus:


Ich habe mein Plugin zum Ignorieren von CORS aktiviert, und die Skripte wurden erfolgreich geladen, aber ich sehe keine sichtbaren Änderungen durch die Plugins. Ich empfehle, dies ebenfalls auszuprobieren. Wenn es funktioniert, sollten Sie die Ursache des Fehlers mit Ihrem CDN finden.

Vielen Dank, dass Sie sich die Zeit genommen haben, sich dies für uns anzusehen. Wir werden am Wochenende einige Tests durchführen und uns melden, sobald es möglich ist.

Ich habe das gleiche Problem mit einem BunnyCDN. Es funktionierte einwandfrei, bis zu einem kürzlichen Update.

Ich habe versucht, .js zu den CORS-Headern bei bunny.net hinzuzufügen, wie hier beschrieben:

Wie damals bin ich nicht schlau daraus, warum dieses Problem aufgetreten ist, als ich letzte Woche auf 6800ad3adf3ef9c3caeb9a4d849997c7a3dc98d7 aktualisiert habe.

Danke, Jay, wir haben Bunny, und die von dir erwähnte Lösung hat jetzt alle Probleme behoben! Danke an dich und alle anderen für die Hilfe und Unterstützung in diesem Fall. Unser Forum ist wieder normal. Also so normal, wie es sein kann :smiley:

Freut mich zu hören, dass es geklappt hat!

Im neuen Plugin-System verwenden wir script type="module", was die korrekte Einstellung der CORS-Header erfordert. Ältere script type="text/javascript" benötigen diese Header nicht.

In den letzten Jahren haben wir schrittweise verschiedene Systeme auf type="module" umgestellt. Themes nutzten dies bereits, ebenso wie Highlight.js (das im anderen Thema erwähnt wurde). Auch das Laden von Schriftarten über ein CDN erfordert CORS-Einstellungen.

Es gab also wahrscheinlich schon vor den jüngsten Änderungen am Plugin-System einige andere subtile Probleme. Jetzt, da Sie die CORS-Konfiguration eingestellt haben, sollte alles wieder funktionieren :chefs_kiss:

Aha. Das hätte ich nicht erwartet.

Nur eine kurze Info: Falls Sie Azure Classic CDN nutzen, ist dieses Problem bereits aufgetreten. Ich versuche derzeit, eine Lösung auf der CDN-Seite zu implementieren, könnte jedoch auf eine Migration zu Azure Front Door statt auf das klassische CDN angewiesen sein.

Ja, ich kann das Problem auch auf Azure Classic CDN bestätigen.

Sie müssen eine neue Regel zur Regelengine hinzufügen, wie im folgenden Beispiel gezeigt:

"rules": [

                        {

                            "name": "JSCORS",

                            "order": 1,

                            "conditions": [

                                {

                                    "name": "RequestUri",

                                    "parameters": {

                                        "typeName": "DeliveryRuleRequestUriConditionParameters",

                                        "operator": "Contains",

                                        "negateCondition": false,

                                        "matchValues": [

                                            "/assets/js/plugins/"

                                        ],

                                        "transforms": []

                                    }

                                }

                            ],

                            "actions": [

                                {

                                    "name": "ModifyResponseHeader",

                                    "parameters": {

                                        "typeName": "DeliveryRuleHeaderActionParameters",

                                        "headerAction": "Overwrite",

                                        "headerName": "Access-Control-Allow-Origin",

                                        "value": "https://forums.mycoolforum.com"

                                    }

                                },

                                {

                                    "name": "ModifyResponseHeader",

                                    "parameters": {

                                        "typeName": "DeliveryRuleHeaderActionParameters",

                                        "headerAction": "Overwrite",

                                        "headerName": "Content-Type",

                                        "value": "application/javascript"

                                    }

                                },

                                {

                                    "name": "CacheExpiration",

                                    "parameters": {

                                        "typeName": "DeliveryRuleCacheExpirationActionParameters",

                                        "cacheBehavior": "BypassCache",

                                        "cacheType": "All"

                                    }

                                }

                            ]

Seltsamerweise hat dieses Problem bei uns nur Plugins betroffen, nicht aber Themes.

Gibt es irgendwo Anweisungen oder Hinweise zu diesen jüngsten Änderungen bezüglich CORS für diejenigen von uns, die Cloudflare nutzen?

@pfaffman @TomoftheFog @tanya_byrne @denvergeeks Könntet ihr bitte bestätigen, wie eure Assets konfiguriert sind? Habt ihr nur ein CDN plus den Anwendungsserver? Oder speichert ihr Assets auch auf S3 oder einem S3-kompatiblen Speicher?

Falls ihr S3 oder einen S3-kompatiblen Speicher verwendet, ist leider nur eine CDN-spezifische Konfiguration zuverlässig. Ich habe angenommen, es ginge hier um S3-Assets, bin mir aber jetzt nicht mehr so sicher.

Für Nutzer, die ein einfaches CDN gegenüber dem Anwendungsserver einsetzen, sollte keine zusätzliche Konfiguration erforderlich gewesen sein. Es sollte „einfach funktionieren", genau wie bei den theme-javascripts- und hightlightjs-Bundles. Allerdings scheint es, als hätten wir in unserer Standard-NGINX-Konfiguration tatsächlich den fehlenden Header übersehen. Entschuldigt das bitte!

Dies sollte die Funktionsweise wiederherstellen:

Sobald dieser Pull Request gemergt ist, ist ein ./launcher rebuild app erforderlich, damit die Änderungen wirksam werden. NGINX-Konfigurationsänderungen werden nicht während UI-Updates angewendet.

Diese Information wurde zum Hauptthema hinzugefügt:

Entschuldigen Sie bitte die Unannehmlichkeiten! Wir hätten umfangreichere Tests mit verschiedenen CDN-Konfigurationen durchführen sollen. Bitte lassen Sie uns wissen, falls Sie nach einem Neubau weiterhin Probleme haben.

Bestätigt, dass wir kein S3 verwenden

Alle mir bekannten Seiten, die das Problem aufweisen, nutzen S3. Bei einigen CDNs stand JS bereits auf der Liste, bei anderen nicht. Ich weiß nicht, woran das liegen könnte; vielleicht haben sich die Standardeinstellungen im Laufe der Jahre geändert?

Entschuldige die späte Antwort, wir nutzen S3.

Ich hatte große Schwierigkeiten, die CORS-Einstellungen in Cloudflare R2 mit einer benutzerdefinierten Domain zum Laufen zu bringen. Am Ende habe ich es durch Ausprobieren gelöst, indem ich eine Header-Transformationsregel verwendet habe, um für meine CDN-Domain immer den richtigen Header einzufügen. Falls das jemand anderem hilft.

Seit wir auf dieses Problem gestoßen sind, haben wir noch ein weiteres entdeckt: Einige Benutzer können Avatar-Bilder nicht sehen, wenn sie die Markdown-Schaltfläche für vorformatierten Text verwenden. Es wird versucht, highlight-js zu laden, und es tritt ein Fehler auf mit der Meldung „CORS fehlgeschlagen":

Wir sind uns nicht sicher, ob das nur bei uns auftritt, wollten aber alle informieren, falls es damit zusammenhängt.

Ich gehe davon aus, dass f.insertcred.it dein S3-CDN ist. HighlightJS sollte vom „Application CDN

Ich habe ein Update vom Hauptadministrator des Forums erhalten:


Soweit ich weiß, haben wir keine CDN-App. Wir haben DISCOURSE_CDN_URL in app.yml nicht auskommentiert.

Wir verwenden nur S3-Variablen wie DISCOURSE_S3_ENDPOINT und DISCOURSE_S3_CDN_URL usw.

Hier ist unsere app.yml mit entfernten sensiblen Daten:

## Dies ist die All-in-One, eigenständige Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEI DER BEARBEITUNG!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Kommentieren Sie die nächste Zeile aus, um den IPv6-Listener zu aktivieren
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container freigeben?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## sehen Sie https://meta.discourse.org/t/17247 für Details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25 % des gesamten Speichers.
  ## wird automatisch vom Bootstrap basierend auf dem erkannten RAM festgelegt, oder Sie können es überschreiben
  db_shared_buffers: "256MB"

  ## kann die Sortierleistung verbessern, erhöht aber die Speichernutzung pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

  ## Maximale Uploadgröße (Standard: 10m)
  upload_size: 20m

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

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## wird automatisch vom Bootstrap basierend auf den erkannten CPUs festgelegt, oder Sie können es überschreiben
  UNICORN_WORKERS: 4

  ## TODO: Der Domänenname, auf den diese Discourse-Instanz antworten wird
  ## Erforderlich. Discourse funktioniert nicht mit einer bloßen IP-Nummer.
  DISCOURSE_HOSTNAME: forums.insertcredit.com

  ## Kommentieren Sie dies aus, wenn Sie möchten, dass der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der durch Kommas getrennten E-Mails, die bei der ersten Anmeldung zu Administratoren und Entwicklern werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'EMAIL'
  
  ## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  ## SMTP-Adresse, Benutzername und Passwort sind erforderlich
  ## WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: USERNAME
  DISCOURSE_SMTP_PASSWORD: "PASSWORD"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standard true)
  DISCOURSE_SMTP_DOMAIN: forums.insertcredit.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@forum.insertcred.it
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: nyc3
  DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
  DISCOURSE_S3_ACCESS_KEY_ID: KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: ACCESS_KEY_VALYE
  DISCOURSE_S3_CDN_URL: https://f.insertcred.it
  DISCOURSE_S3_BUCKET: insertcredit-forum
  DISCOURSE_S3_BACKUP_BUCKET: insertcredit-forum-backup
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

  DISCOURSE_CAN_PERMANENTLY_DELETE: true

  ## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
  LETSENCRYPT_ACCOUNT_EMAIL: EMAIL

  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## Der Maxmind-Geolokalisierungs-IP-Schlüssel für die IP-Adressenabfrage
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins gehen hier
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-bbcode-color.git
          - git clone https://github.com/discourse/discourse-signatures.git
          - git clone https://github.com/discourse/discourse-chart.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

## Beliebige benutzerdefinierte Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die 'Von'-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, kommentieren Sie dies aus und ändern Sie:
  ## Nach Erhalt der ersten Anmelde-E-Mail kommentieren Sie die Zeile erneut. Sie muss nur einmal ausgeführt werden.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Ende der benutzerdefinierten Befehle"

Ich hoffe, dies ist bei der Anfrage von einiger Hilfe. Ein Punkt ist zu beachten: Wir haben keine Berichte über das Verschwinden von Avataren erhalten, wie wir es vor einigen Tagen hatten. Soweit ich weiß, wurde nichts geändert, daher sind wir uns nicht sicher, ob das Problem nur eine kleine Gruppe von Benutzern betraf, die seit der Lösung des vorherigen Problems im Laufe der Zeit von selbst behoben wurde.

Nochmals vielen Dank, dass Sie sich dies angesehen haben.