Я пытаюсь загрузить файлы через пользовательскую конечную точку, используя пользовательский API с моего сайта.
Я могу войти только под учётной записью администратора.
Я могу делать практически всё, кроме загрузки файлов.
> [Ошибка] Домен https://my.domain не разрешён заголовком Access-Control-Allow-Origin.
> [Ошибка] Fetch API не может загрузить https://my.domain/m/upload.json из-за проверок контроля доступа.
> [Ошибка] Не удалось загрузить ресурс: Домен https://my.domain не разрешён заголовком Access-Control-Allow-Origin. (upload.json, строка 0)
> [Лог] API-CALL-ERROR – "/m/upload.json" – TypeError: Домен https://my.domain не разрешён заголовком Access-Control-Allow-Origin. (app.8eb0470a.chunk.js, строка 1)
> TypeError: Домен https://my.domain не разрешён заголовком Access-Control-Allow-Origin.
Я добавил https://my.domain и http://localhost:19006 (для тестирования) в настройки CORS и установил DISCOURSE_ENABLE_CORS true в файле app.yml.
Также я пробовал добавить https://my.domain в переменную DISCOURSE_CORS_ORIGIN в файле app.yml, но это тоже не помогло.
Что я упускаю?
Единственное, что я вижу в /shared/log/rails/production.log, это 
TL;DR
Проверьте все задействованные nginx или серверы. В моем случае их было три: веб-сайт, Docker-контейнер Discourse и настройки внутри самого контейнера Discourse. Параметр client_max_body_size должен быть установлен в значение, которое вы хотите ограничить при загрузке.
Я выбрал client_max_body_size 999m, просто потому что хотел ограничить загрузку только через настройки Discourse. Вы можете добавить эту строку внутри тегов http или server в файле nginx.conf. Я предпочитаю добавлять её в самом конце, чтобы быть уверенным 
Более подробное описание:
После целого дня копания и скачивания Firefox (настоятельно рекомендую для веб-разработки) я выяснил, что причина невозможности загрузки заключалась в лимите, установленном внутри Docker-контейнера Discourse (некоторые могут сказать: «да, но это динамически устанавливается при пересборке лаунчера»… — я предпочитаю быть уверенным :)). Затем оказалось, что наш собственный nginx, хостящий образ Docker, не имел установленного лимита, поэтому по умолчанию использовалось значение client_max_body_size 1MiB, чего явно недостаточно :). После изменения этого параметра мне также пришлось зайти в frontend-nginx и изменить его там. Три изменения, шесть часов возни с управлением предварительными запросами CORS в nginx и немного стресса — теперь всё работает.
2 лайка