diff options
author | James Tucker <jftucker@gmail.com> | 2022-11-07 19:00:27 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-08 04:00:27 +0100 |
commit | 833d9c2f1c66b97faf11fb285a8b639fdca24069 (patch) | |
tree | f437934106fb30483d26d3a42c6c4f7ad79399f4 /app | |
parent | 9f4930ec11b4185fcb17e5394fd0234dfcf16ed3 (diff) |
Improve performance by avoiding method cache busts (#19957)
Switch to monkey-patching http.rb rather than a runtime extend of each response, so as to avoid busting the global method cache. A guard is included that will provide developer feedback in development and test environments should the monkey patch ever collide.
Diffstat (limited to 'app')
-rw-r--r-- | app/lib/request.rb | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/app/lib/request.rb b/app/lib/request.rb index 648aa3085..1ea86862d 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -62,8 +62,6 @@ class Request end begin - response = response.extend(ClientLimit) - # If we are using a persistent connection, we have to # read every response to be able to move forward at all. # However, simply calling #to_s or #flush may not be safe, @@ -181,6 +179,14 @@ class Request end end + if ::HTTP::Response.methods.include?(:body_with_limit) && !Rails.env.production? + abort 'HTTP::Response#body_with_limit is already defined, the monkey patch will not be applied' + else + class ::HTTP::Response + include Request::ClientLimit + end + end + class Socket < TCPSocket class << self def open(host, *args) |