Sto cercando di caricare file tramite un endpoint personalizzato e utilizzando un’API utente dal mio sito web.
Posso accedere solo con un utente amministratore.
Posso letteralmente fare tutto il resto, tranne che caricare file.
> [Errore] L'origine https://my.domain non è consentita da Access-Control-Allow-Origin.
> [Errore] L'API Fetch non può caricare https://my.domain/m/upload.json a causa dei controlli di controllo degli accessi.
> [Errore] Impossibile caricare la risorsa: l'origine https://my.domain non è consentita da Access-Control-Allow-Origin. (upload.json, riga 0)
> [Log] API-CALL-ERROR – "/m/upload.json" – TypeError: L'origine https://my.domain non è consentita da Access-Control-Allow-Origin. (app.8eb0470a.chunk.js, riga 1)
> TypeError: L'origine https://my.domain non è consentita da Access-Control-Allow-Origin.
Ho aggiunto https://my.domain e http://localhost:19006 (per i test) nelle impostazioni CORS e ho impostato DISCOURSE_ENABLE_CORS true su app.yml.
Ho anche provato ad aggiungere https://my.domain in DISCOURSE_CORS_ORIGIN su app.yml, ma anche questo non ha funzionato.
Cosa sto trascurando?
L’unica cosa che vedo in /shared/log/rails/production.log è 
TL;DR
Controlla tutti gli nginx o i server coinvolti. Nel mio caso, tre: il sito web, il container Docker di Discourse e l’interno del container Docker di Discourse. client_max_body_size dovrebbe essere impostato sul limite desiderato per i caricamenti.
Ho scelto client_max_body_size 999m solo perché volevo limitarlo esclusivamente dalle impostazioni di Discourse. Puoi aggiungere quella riga all’interno dei tag http o server dentro nginx.conf. Preferisco aggiungerla all’ultima riga, per sicurezza 
Versione più dettagliata:
Dopo un’intera giornata di ricerche e download di Firefox… lo consiglio vivamente per lo sviluppo web. Ho scoperto che il motivo per cui non potevo caricare file era il limite impostato dall’nginx all’interno del container Docker di Discourse (alcuni potrebbero dire: “sì… ma viene impostato dinamicamente quando il launcher viene ricostruito”… a me piace essere sicuro :)). Poi c’era il fatto che il nostro nginx, che ospita l’immagine Docker, non aveva un limite impostato, quindi utilizzava quello predefinito client_max_body_size 1MiB, che non è sufficiente :). Dopo aver modificato anche quello, ho dovuto intervenire sull’nginx frontend e cambiare anche lì. Tre modifiche, sei ore di sperimentazione con la gestione delle richieste preflight CORS in nginx e un po’ di stress, ora funziona.
2 Mi Piace