Tutti i plugin non funzionano a causa di un errore CORS dopo l'aggiornamento recente

Dalla scorsa settimana, tutti i plugin, sia core che installati, hanno smesso di funzionare, anche se abilitati sul nostro forum. Inizialmente ho pensato che fosse legato al bug precedentemente menzionato FIX: Compile missing rollup plugin bundles on demand in development - #8, ma abbiamo eseguito diversi aggiornamenti da allora e nulla ha risolto il problema. Ho provato ad abilitare un plugin precedentemente non utilizzato, quello preinstallato “User Notes”, ma non ci sono opzioni per aggiungere note a nessun utente. Persino il Docker Manager ha smesso di funzionare, quindi tutti gli aggiornamenti devono essere eseguiti a livello di server, permettendo a una sola persona di applicarli invece che al team di amministrazione.

Ho cercato una soluzione, ma tutto ciò che ho trovato riguarda plugin disabilitati automaticamente o qualcosa di simile, non qualcosa di specifico come questo.

Potete gentilmente suggerire possibili soluzioni o strade da percorrere? Vorremmo evitare un rollback, ma finora sembra che possa essere l’unica opzione rimasta.

Grazie come sempre a tutti voi per il vostro continuo supporto :smiley:

Hmm. Sembra che si tratti di un problema con il tuo CDN:


Ho abilitato il mio plugin per ignorare il CORS e gli script sono stati caricati con successo, ma non vedo visivamente alcun cambiamento dai plugin. Ti consiglio di provare anche tu; se funziona, dovresti scoprire cosa sta causando l’errore con il tuo CDN.

Grazie mille per aver dedicato del tempo a occuparcene. Eseguiremo alcuni test nel fine settimana e aggiorneremo non appena possibile.

Ho lo stesso problema con bunnycdn. Funzionava correttamente fino a un recente aggiornamento.

Ho provato ad aggiungere .js alle intestazioni CORS su bunny.net come descritto qui:

Come in quel caso, non capisco perché questo problema sia iniziato dopo aver aggiornato a 6800ad3adf3ef9c3caeb9a4d849997c7a3dc98d7 la settimana scorsa.

Grazie Jay, abbiamo Bunny e la correzione che hai menzionato ha risolto tutti i problemi! Grazie a te e a tutti per l’aiuto e il supporto in questa occasione, il nostro forum è tornato alla normalità. Beh, normale come può esserlo :smiley:

Felice di sapere che hai risolto il problema!

Nel nuovo sistema dei plugin, utilizziamo script type="module", che richiede l’impostazione delle corrette intestazioni CORS. I vecchi script type="text/javascript" non richiedono queste intestazioni.

Negli ultimi anni abbiamo migrato gradualmente diversi sistemi verso type="module". I temi lo utilizzavano già, così come highlightjs (che era menzionato nell’altro argomento). Anche il caricamento dei font da CDN richiede le intestazioni CORS.

Quindi probabilmente c’erano già alcuni altri problemi sottili, anche prima delle recenti modifiche al sistema dei plugin. Ora che hai configurato le impostazioni CORS, tutto dovrebbe funzionare di nuovo :chefs_kiss:

Aha. Questo è l’ultimo che avrei immaginato.

Solo un avviso per tutti: se state utilizzando Azure Classic CDN, questo problema ha iniziato a verificarsi. Sto provando una soluzione lato CDN, ma potrebbe essere necessario migrare verso Front Door invece di Classic CDN.

Sì, ho confermato lo stesso problema anche su Azure Classic CDN.

È necessario aggiungere una nuova regola al motore delle regole; ecco un esempio:

"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"

                                    }

                                }

                            ]

Stranamente, questo problema non ha interessato i temi, ma solo i plugin per noi.

C’è un luogo dove trovare istruzioni o linee guida relative a questi recenti cambiamenti riguardanti CORS per chi utilizza Cloudflare?

@pfaffman @TomoftheFog @tanya_byrne @denvergeeks potreste confermare come sono configurate le vostre risorse? Avete solo un CDN + il server applicativo? Oppure memorizzate anche le risorse su S3 o su storage compatibile con S3?

Se state utilizzando S3 o storage compatibile con S3, purtroppo l’unico modo affidabile è aggiungere una configurazione specifica per il CDN. Avevo assunto che questo argomento riguardasse le risorse S3, ma ora non ne sono più così sicuro?

Per chi utilizza un CDN semplice contro il server applicativo, non dovrebbe essere stato necessario alcun lavoro di configurazione aggiuntivo. Dovrebbe “funzionare immediatamente”, esattamente come i bundle di theme-javascripts e highlightjs. Tuttavia, sembra che mancasse effettivamente l’intestazione nella nostra configurazione NGINX predefinita. Ci scusiamo per l’inconveniente!

Questo dovrebbe risolvere il problema:

Una volta unita la modifica, sarà necessario eseguire ./launcher rebuild app affinché abbia effetto. Le modifiche alla configurazione NGINX non vengono applicate durante gli aggiornamenti dell’interfaccia utente.

Ho aggiunto queste informazioni al topic principale:

Ci scusiamo per il disagio! Avremmo dovuto effettuare test più approfonditi con diverse configurazioni CDN. Fateci sapere se riscontrate ancora problemi dopo la ricostruzione.

Confermiamo che non utilizziamo S3

Tutti i siti che conosco e che presentano il problema sono ospitati su S3. Alcune CDN avevano già JS nell’elenco, altre no. Non so perché ciò possa essere accaduto; forse le impostazioni predefinite sono cambiate nel corso degli anni?

Scusa il ritardo nella risposta, usiamo S3.

Stavo avendo difficoltà a far funzionare le impostazioni CORS in Cloudflare R2 per questo caso con un dominio personalizzato. Alla fine ho risolto con un approccio di forza bruta, utilizzando una regola di trasformazione degli header per inserire sempre l’header corretto per il mio dominio CDN. Nel caso possa essere utile a qualcun altro.

Abbiamo anche riscontrato un altro problema da quando abbiamo scoperto questo inconveniente: alcuni utenti non riescono a visualizzare le immagini degli avatar quando utilizzano il pulsante Markdown per il testo preformattato. Il sistema tenta di caricare highlight-js e restituisce un errore indicando che il CORS è fallito:

Non siamo sicuri che il problema sia solo dal nostro lato, ma volevamo informare tutti nel caso fosse correlato.

Immagino che f.insertcred.it sia il tuo CDN S3? HighlightJS dovrebbe essere caricato dal ‘CDN dell’applicazione’, non dal CDN S3, quindi questa è una questione sorprendente. Per quanto ne so, nulla relativo a highlightjs è cambiato negli ultimi mesi.

Hai un CDN per l’applicazione? O solo S3 + CDN S3?

Ho ricevuto un aggiornamento dall’amministratore principale del forum:


Per quanto ne sappia, non abbiamo un’app CDN. Non abbiamo de-commentato DISCOURSE_CDN_URL in app.yml.

Usiamo solo le variabili S3 come DISCOURSE_S3_ENDPOINT e DISCOURSE_S3_CDN_URL, ecc.

Ecco il nostro app.yml con le informazioni sensibili rimosse

## questo è il template del contenitore Docker Discourse all-in-one, standalone
##
## Dopo aver apportato modifiche a questo file, DEVI eseguire il rebuild
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO MOLTO, MOLTO SENSIBILI A ERRORI NEGLI SPAZI O NELL'ALLINEAMENTO!
## visita http://www.yamllint.com/ per validare questo file se necessario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## De-commenta la riga successiva per abilitare l'ascoltatore IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## De-commenta queste due righe se desideri aggiungere Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP dovrebbe esporre questo contenitore?
## Se vuoi che Discourse condivida una porta con un altro server web come Apache o nginx,
## consulta https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers al massimo al 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
  db_shared_buffers: "256MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git dovrebbe utilizzare questo contenitore? (default: tests-passed)
  #version: tests-passed

  ## Dimensione massima del caricamento (default: 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

  ## Quanti richieste web simultanee sono supportate? Dipende dalla memoria e dai core CPU.
  ## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascriverlo
  UNICORN_WORKERS: 4

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
  DISCOURSE_HOSTNAME: forums.insertcredit.com

  ## De-commenta se desideri che il contenitore venga avviato con lo stesso
  ## nome di host (opzione -h) specificato sopra (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
  ## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'EMAIL'
  
  ## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche
  ## INDIRIZZO SMTP, nome utente e password sono obbligatori
  ## ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
  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           # (opzionale, default 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

  ## Se hai aggiunto il template Lets Encrypt, de-commenta qui sotto per ottenere un certificato SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: EMAIL

  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il recupero)
  ## consulta https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La chiave IP geolocalizzazione maxmind per la ricerca degli indirizzi IP
  ## consulta https://meta.discourse.org/t/-/137387/23 per i dettagli
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Il contenitore Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## consulta https://meta.discourse.org/t/19157 per i dettagli
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

## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
  - exec: echo "Inizio dei comandi personalizzati"
  ## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, de-commenta e modifica:
  ## Dopo aver ricevuto la prima email di iscrizione, rimetti il commento alla riga. Deve essere eseguita solo una volta.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fine dei comandi personalizzati"

Spero che questo sia di qualche aiuto riguardo alla richiesta. Un punto da notare è che non abbiamo ricevuto segnalazioni dei problemi di scomparsa degli avatar come alcuni giorni fa. Per quanto ne sappia, non è stato apportato alcun cambiamento, quindi non siamo sicuri se il problema fosse limitato a un piccolo gruppo di utenti e, poiché il problema precedente è stato risolto, si sia risolto autonomamente nel tempo.

Grazie ancora per aver indagato su questo.