プロキシサーバーの背後でレター画像が空白

しばらく前に同様の問題がありました - Avatar images broken behind proxy

レターアバター画像が直接読み込まれる際に500エラーを生成しています。Dockerコンテナ内から、プロキシサーバー経由でhttps://avatars.discourse.org/およびhttps://avatars.discourse-cdn.com/をcurlできます。

nginxまたはdiscourse production.logのいずれにも、失敗の原因を示すエラーは見つかりませんでした。

エラーを探すべき場所、または過去約1週間で私が知らない間に発生した明らかなことはありますか?

この問題はまだ解決していません。コードを少し調べてみたところ、予想通り、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.pnghttps://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では、デフォルトのletter_avatar_proxy URLは"/letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png"と記載されており、画像の1つを右クリックしてURLを取得すると、(正しく?)https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.pngとなっています。

curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png を実行すると、500 Internal Server Error が返されます。

奇妙なことに、GET リクエストが 2 回発生しているようです。ロードバランサーの設定が間違っているのでしょうか。

編集: ロードバランサーの問題ではありませんでした。GET リクエストが 2 回発生するのは見当違いでした。

これは非常にイライラします。レターアバター画像が500を返す理由がわかりません。

ああ、Discourse には Web ユーザーインターフェイスからしかアクセスできない独自のログセクションがあることを発見しました。/facepalm。

これは show_proxy_letter に言及しているので、関連性がある可能性が高いです。

メッセージ (70085 件コピーが報告されました)

乗っ取られた応答を正しく処理できませんでした: EOFError : end of file reached

バックトレース

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

外部システムのアイコンを完全にオフにしました。

「いいね!」 1