Возврат 500 при запросе пользовательских аватаров

Я попытался загрузить пользовательский аватар. Загрузка прошла успешно, но при запросе к https://example.com/user_avatar/example.com/example_user/96/11_2.png возвращается ошибка 500. У аватара по умолчанию для анонимных пользователей такой ошибки нет.

Используется последняя ветка master Discourse.
В качестве хранилища S3 используется Cloudflare R2.

Используете ли вы #неподдерживаемую_установку?

В любом случае, одной ошибки 500 недостаточно для диагностики. Пожалуйста, предоставьте соответствующую информацию из логов, и кто-нибудь, возможно, сможет вам помочь.

Конечно. Кстати, я использовал Cloudflare R2 (совместимый с S3) для хранения загружаемого контента. Когда я проверил файлы в бакете, файл аватара действительно там был, но клиенты не могли получить к нему доступ по адресу https://example.com/user_avatar/example.com/example_user/96/11_2.png. Это очень странно.

В production.log я нашел эту строку:

Обработка запроса UserAvatarsController#show с форматом PNG
  Параметры: {"hostname" => "example.com", "username" => "example_user", "size" => "288", "version" => "12_2"}
Завершено с кодом 418 за 599 мс (Представления: 4,1 мс | ActiveRecord: 0,0 мс (0 запросов, 0 в кэше) | GC: 0,4 мс)

Это может быть связано с:

Возможно, это проблема S3 в последней версии :thinking:.

Хорошо, надеюсь, это проблема только текущей nightly-версии. Это решается настройкой прокси.

Привет, @MoRanYue, не мог бы ты подробнее рассказать, как именно ты это решил?

У меня возникла та же проблема.

Спасибо

@avidseeker
Когда вы используете сервис OSS, а ваш сервер не может получить к нему доступ (например, вы находитесь в Китае, и местный провайдер блокирует соединения вашего сервера с Cloudflare R2), то при попытке клиентов получить ресурсы кастомных аватаров ваш сервер должен загрузить их из OSS. Если это не удаётся, сервер возвращает клиентам ошибку 500.

В моём случае я установил две переменные окружения: HTTP_PROXY и HTTPS_PROXY, указав на прокси-сервер, который имеет доступ к вашему сервису OSS. Если вы установили Discourse стандартным способом, в файле app.xml должен быть раздел env; добавьте туда эти две переменные, после чего можно запустить приложение. Я использовал нестандартную установку и управлял Discourse через Systemd, поэтому добавил два параметра Environment в файл .service.

Не знаю, есть ли в вашей стране система интернет-цензуры. Если да, то, скорее всего, вы уже знаете, что делать. Если нет, проверьте статус работы вашего сервиса OSS и настройки, связанные с S3.