rbos
(Rob Bos)
2024 年6 月 13 日 16:06
1
我之前也遇到过类似的问题 - Avatar images broken behind proxy
字母头像图片在直接加载时会生成 500 错误。在 Docker 容器内,我可以通过我们的代理服务器 curl https://avatars.discourse.org/ 以及 https://avatars.discourse-cdn.com/。
我在日志中找不到任何表明失败原因的错误,无论是 nginx 还是 discourse production.log。
您知道我应该在哪里查找错误,或者在过去大约一周内是否有什么我不知道的明显问题吗?
rbos
(Rob Bos)
2024 年7 月 9 日 20:17
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 中,它说默认的 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)
2024 年7 月 9 日 21:11
3
curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png 返回 500 内部服务器错误。
奇怪的是,我似乎收到了两个 GET 请求。我想知道我们的负载均衡器是否配置错误。
编辑:好的,不是 LB,那个两个 GET 请求是误导。
rbos
(Rob Bos)
2024 年7 月 10 日 17:34
4
这真的很令人沮丧。我弄不清楚为什么字母头像图片会返回 500。
rbos
(Rob Bos)
2024 年7 月 10 日 17:41
5
啊哈,我发现 Discourse 有自己的日志部分,只能通过 Web 用户界面访问。/facepalm。
这提到了 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'