rbos
(Rob Bos)
6월 13, 2024, 4:06오후
1
얼굴에 비슷한 문제가 있었습니다 - Avatar images broken behind proxy
문자 아바타 이미지가 직접 로드될 때 500 오류를 발생시키고 있습니다. Docker 컨테이너 내부에서는 프록시 서버를 통해 https://avatars.discourse.org/ 와 https://avatars.discourse-cdn.com/ 둘 다 curl로 접근할 수 있습니다.
nginx나 discourse production.log에서 실패 원인을 가리키는 오류를 찾을 수 없습니다.
어디서 오류를 찾아봐야 할지, 아니면 지난 1주일 사이에 제가 모르는 명백한 변화가 있었는지 아이디어가 있을까요?
rbos
(Rob Bos)
7월 9, 2024, 8:17오후
2
여전히 이 문제가 발생하고 있습니다. 코드를 조금 살펴보니 예상대로, https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png " 이 코드가 실제로 요청하는 URL입니다. Discourse 컨테이너 내부에서는 wget으로 파일을 직접 가져올 수 있으며 유효한 PNG를 받을 수 있습니다. 예를 들어: https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.png → Doing math for your connnection!
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"로 설정되어 있으며, 이미지 중 하나를 우클릭하여 URL을 가져오면 (정확하게?) https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png 입니다.
rbos
(Rob Bos)
7월 9, 2024, 9:11오후
3
curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png를 실행하면 500 Internal Server Error가 반환됩니다.
이상하게도 GET 요청이 두 번 발생하는 것 같습니다. 로드 밸런서가 잘못 설정된 것은 아닌지 궁금합니다.
수정: 아, LB가 문제가 아니었습니다. GET 요청이 두 번 발생하는 것은 오해였습니다.
rbos
(Rob Bos)
7월 10, 2024, 5:34오후
4
정말 답답합니다. 왜 문자 아바타 이미지가 500 오류를 반환하는지 모르겠어요.
rbos
(Rob Bos)
7월 10, 2024, 5:41오후
5
아하, Discourse에는 웹 사용자 인터페이스에서만 접근할 수 있는 자체 로그 섹션이 있다는 걸 발견했어요. /facepalm.
여기서 show_proxy_letter가 언급되므로 관련이 있을 것 같습니다.
Message (70085 copies reported)
Failed to process hijacked response correctly : EOFError : end of file reached
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'
rbos
(Rob Bos)
7월 10, 2024, 6:37오후
6
외부 시스템 아바타를 완전히 비활성화했습니다.