Estoy intentando subir archivos mediante un endpoint personalizado y utilizando una API de usuario desde mi sitio web.
Solo puedo iniciar sesión con un usuario administrador.
Puedo hacer prácticamente cualquier otra cosa, excepto subir archivos.
> [Error] El origen https://my.domain no está permitido por Access-Control-Allow-Origin.
> [Error] La API Fetch no puede cargar https://my.domain/m/upload.json debido a las comprobaciones de control de acceso.
> [Error] Error al cargar el recurso: El origen https://my.domain no está permitido por Access-Control-Allow-Origin. (upload.json, línea 0)
> [Log] API-CALL-ERROR – "/m/upload.json" – TypeError: El origen https://my.domain no está permitido por Access-Control-Allow-Origin. (app.8eb0470a.chunk.js, línea 1)
> TypeError: El origen https://my.domain no está permitido por Access-Control-Allow-Origin.
He añadido https://my.domain y http://localhost:19006 (para pruebas) en la configuración de CORS y también he añadido DISCOURSE_ENABLE_CORS true en app.yml.
También intenté añadir https://my.domain en DISCOURSE_CORS_ORIGIN en app.yml, pero tampoco funcionó.
¿Qué estoy pasando por alto?
Lo único que veo en /shared/log/rails/production.log es 
TL;DR
Revisa todos los servidores nginx o implicados. En mi caso, fueron 3: el sitio web, el contenedor Docker de Discourse y, dentro del contenedor Docker de Discourse. La directiva client_max_body_size debe establecerse en el límite que desees para las subidas.
Elegí client_max_body_size 999m simplemente porque quería limitar el tamaño solo desde la configuración de Discourse. Puedes agregar esa línea dentro de las etiquetas http o server en nginx.conf. Yo prefiero añadirla en la última línea, por seguridad 
Versión más detallada:
Después de un día entero investigando y descargando Firefox… totalmente recomendado para desarrollo web. Descubrí que la razón por la que no podía subir archivos era el límite establecido por nginx dentro del contenedor Docker de Discourse (algunos dirían: “sí… pero eso se configura dinámicamente cuando se reconstruye el launcher…” - a mí me gusta estar seguro :)). Luego estaba el hecho de que nuestro propio nginx que aloja la imagen Docker no tenía un límite definido, lo que por defecto era client_max_body_size 1MiB, que no es suficiente :). Después de cambiar eso también, tuve que ir al nginx del frontend y modificarlo también. Tres cambios, seis horas lidiando con la gestión de solicitudes preflight CORS en nginx y un poco de estrés, y ahora funciona.
2 Me gusta