Images de lettres vides derrière un serveur proxy

J’ai eu un problème similaire il y a quelque temps - Avatar images broken behind proxy

Les images d’avatar en lettres génèrent une erreur 500 lors du chargement direct. Depuis l’intérieur du conteneur Docker, je peux faire un curl vers https://avatars.discourse.org/ via notre serveur proxy ainsi que vers https://avatars.discourse-cdn.com/.

Je ne trouve aucune erreur dans les journaux qui indiquerait pourquoi cela échoue, que ce soit dans nginx ou dans le fichier production.log de discourse.

Avez-vous une idée où je devrais chercher les erreurs, ou s’il y a quelque chose d’évident qui s’est produit au cours de la dernière semaine environ et que j’ignore ?

J’ai toujours ce problème. J’ai un peu examiné le code et, comme je m’y attendais, https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png est ce que le code demande réellement. Dans le conteneur Discourse, je peux wget le fichier directement et obtenir un PNG valide. Par exemple : https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.pnghttps://forum.pkp.sfu.ca/48.png

Dans production.log, il est indiqué que l’image est téléchargée avec succès, apparemment :

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)

Donc, pour une raison quelconque, j’obtiens toujours une image vide. Peut-être qu’il n’utilise pas HTTP_PROXY ou HTTPS_PROXY ou quelque chose comme ça.

Dans site_settings.yml, il est indiqué que l’URL par défaut de proxy d’avatar de lettre est : " /letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png " et lorsque je fais un clic droit sur l’une des images pour obtenir l’URL, c’est (correctement ?) https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png

Effectuer un curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png renvoie une erreur interne 500.

Bizarrement, il semble que j’obtienne deux requêtes GET. Je me demande si notre répartiteur de charge est mal configuré.

modification : D’accord, ce n’est pas le LB, le truc des deux requêtes GET était une fausse piste.

C’est assez frustrant. Je n’arrive pas à comprendre pourquoi les images d’avatar de lettres renvoient une erreur 500.

Ahhah, j’ai découvert que Discourse a sa PROPRE SECTION DE LOG ACCESSIBLE UNIQUEMENT VIA L’INTERFACE UTILISATEUR WEB. /facepalm.

Ceci mentionne show_proxy_letter, donc c’est probablement pertinent.

Message (70085 copies signalées)

Échec du traitement correct de la réponse détournée : EOFError : fin de fichier atteinte

Trace

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

J’ai désactivé complètement les avatars des systèmes externes.

1 « J'aime »