rbos
(Rob Bos)
13.Июнь.2024 16:06:21
1
У меня была похожая проблема некоторое время назад — Avatar images broken behind proxy
Изображения-аватары с буквами вызывают ошибку 500 при прямой загрузке. Из контейнера Docker я могу выполнить curl для https://avatars.discourse.org/ через наш прокси-сервер, а также для https://avatars.discourse-cdn.com/ .
Я не нашёл никаких ошибок в логах, которые указывали бы на причину сбоя, ни в nginx, ни в production.log Discourse.
Есть ли у вас идеи, где стоит искать ошибки, или возможно, что-то очевидное изменилось за последнюю неделю, о чём я не знаю?
rbos
(Rob Bos)
09.Июль.2024 20:17:23
2
У меня всё ещё сохраняется эта проблема. Я немного изучил код и, как и ожидал, именно на https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png делает запрос код. Внутри контейнера Discourse я могу напрямую скачать файл через wget и получить валидный PNG. Например: https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.png → https://forum.pkp.sfu.ca/48.png
В файле production.log показано, что изображение, якобы, успешно загружается:
Started GET "/presence/get?channels%5B%5D=%2Fdiscourse-presence%2Freply%2F88689&channels%5B%5D=%2Fdiscourse-presence%2Fwhisper%2F88689" for 172.17.1.79 at 2024-07-09 19:59:01 +0000
Processing by PresenceController#get as JSON
Parameters: {"channels"=>["/discourse-presence/reply/88689", "/discourse-presence/whisper/88689"]}
Processing by UserAvatarsController#show_proxy_letter as PNG
Parameters: {"version"=>"v4", "letter"=>"b", "color"=>"bcef8e", "size"=>"48"}
Completed 200 OK in 14ms (Views: 0.5ms | ActiveRecord: 0.0ms | Allocations: 3095)
Completed 418 in 9ms (Views: 0.4ms | ActiveRecord: 0.0ms | Allocations: 1680)
Таким образом, по какой-то причине я всё ещё получаю пустое изображение. Возможно, не используются переменные окружения HTTP_PROXY или HTTPS_PROXY или что-то в этом роде.
В файле site_settings.yml указано, что URL по умолчанию для letter_avatar_proxy: "/letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png", и когда я нажимаю правой кнопкой мыши на одно из изображений, чтобы получить URL, он (правильно?) выглядит так: https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png
rbos
(Rob Bos)
09.Июль.2024 21:11:20
3
Выполнение команды curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png возвращает ошибку 500 Internal Server Error.
Странно, но, похоже, отправляются два GET-запроса. Неужели наш балансировщик нагрузки настроен неправильно?
edit: Всё в порядке, проблема не в балансировщике. Два GET-запроса оказались ложной тревогой.
rbos
(Rob Bos)
10.Июль.2024 17:34:17
4
Это довольно раздражает. Я не могу понять, почему изображения аватаров с буквами возвращают ошибку 500.
rbos
(Rob Bos)
10.Июль.2024 17:41:28
5
Ах, оказывается, у Discourse есть СВОЙ РАЗДЕЛ ЖУРНАЛА, ДОСТУПНЫЙ ТОЛЬКО ЧЕРЕЗ ВЕБ-ИНТЕРФЕЙС. /лицо_в_ладонь.
Здесь упоминается show_proxy_letter, так что это, вероятно, имеет отношение к делу.
Сообщение (70085 копий, о которых сообщалось)
Не удалось корректно обработать перехваченный ответ: EOFError : достигнут конец файла
Трассировка стека
/usr/local/lib/ruby/3.3.0/net/protocol.rb:237:in `rbuf_fill'
/usr/local/lib/ruby/3.3.0/net/protocol.rb:199:in `readuntil'
/usr/local/lib/ruby/3.3.0/net/protocol.rb:209:in `readline'
/usr/local/lib/ruby/3.3.0/net/http/response.rb:158:in `read_status_line'
/usr/local/lib/ruby/3.3.0/net/http/response.rb:147:in `read_new'
/usr/local/lib/ruby/3.3.0/net/http.rb:1625:in `connect'
/var/www/discourse/lib/final_destination/http.rb:27:in `block in connect'
/var/www/discourse/lib/final_destination/http.rb:17:in `each'
/var/www/discourse/lib/final_destination/http.rb:17:in `each_with_index'
/var/www/discourse/lib/final_destination/http.rb:17:in `connect'
/usr/local/lib/ruby/3.3.0/net/http.rb:1580:in `do_start'
/usr/local/lib/ruby/3.3.0/net/http.rb:1569:in `start'
/usr/local/lib/ruby/3.3.0/net/http.rb:1029:in `start'
/var/www/discourse/lib/final_destination.rb:556:in `safe_session'
/var/www/discourse/lib/final_destination.rb:491:in `safe_get'
/var/www/discourse/lib/final_destination.rb:170:in `get'
/var/www/discourse/lib/file_helper.rb:73:in `download'
/var/www/discourse/app/controllers/user_avatars_controller.rb:176:in `proxy_avatar'
/var/www/discourse/app/controllers/user_avatars_controller.rb:54:in `block in show_proxy_letter'
/var/www/discourse/lib/hijack.rb:64:in `instance_eval'
/var/www/discourse/lib/hijack.rb:64:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:115:in `block in do_work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:109:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:97:in `block (2 levels) in start_thread'
rbos
(Rob Bos)
10.Июль.2024 18:37:16
6
Я полностью отключил аватары внешних систем.