Imágenes de cartas en blanco detrás del servidor proxy

Tuve un problema similar hace un tiempo - Avatar images broken behind proxy

Las imágenes de avatar de letras están generando un error 500 al cargarse directamente. Desde dentro del contenedor Docker, puedo hacer curl a https://avatars.discourse.org/ a través de nuestro servidor proxy, así como a https://avatars.discourse-cdn.com/.

No encuentro ningún error en los registros que indique por qué está fallando, ni en nginx ni en el production.log de discourse.

¿Alguna idea de dónde debería buscar errores, o si hay algo obvio que haya sucedido en la última semana que no sepa?

Todavía tengo este problema. Investigué un poco el código y, como esperaba, https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png es lo que el código está solicitando en realidad. Dentro del contenedor de Discourse, puedo descargar el archivo directamente con wget y obtener un PNG válido. Por ejemplo: https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.pnghttps://forum.pkp.sfu.ca/48.png

En production.log, se muestra que la imagen se descargó correctamente, supuestamente:

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)

Así que, por alguna razón, sigo obteniendo una imagen en blanco. Quizás no esté usando HTTP_PROXY o HTTPS_PROXY o algo así.

En site_settings.yml, dice que la URL predeterminada de letter_avatar_proxy es: " /letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png" y cuando hago clic derecho en una de las imágenes para obtener la URL, es (correctamente?) https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png

Hacer un curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png devuelve un error interno del servidor 500.

Curiosamente, parece que obtengo dos solicitudes GET. Me pregunto si nuestro balanceador de carga está mal configurado.

editar: Está bien, no es el LB, lo de las dos solicitudes GET fue una pista falsa.

Esto es bastante frustrante. No puedo entender por qué las imágenes de avatar de letras devuelven 500.

Ahhah, ¡descubrí que Discourse tiene su PROPIA SECCIÓN DE REGISTROS ACCESIBLE ÚNICAMENTE A TRAVÉS DE LA INTERFAZ DE USUARIO WEB! /facepalm.

Esto menciona show_proxy_letter, así que probablemente sea relevante.

Mensaje (70085 copias reportadas)

No se pudo procesar correctamente la respuesta secuestrada: EOFError: fin de archivo alcanzado

Backtrace

/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'

Desactivé por completo los avatares de sistemas externos.

1 me gusta