1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix query cache to load before first request

In a test app we observed that the query cache was not enabled on the
first request. This was because the query cache hooks are installed on
load and active record is loaded in the middle of the first request.

If we remove the `on_load` from the railtie the query cache hooks will
be installed before the first request, allowing the cache to be enabled
on that first request.

This is ok because query cache doesn't load anything else, only itself
so we're not eager loading all of active record before the first
request, just the query cache hooks.

[Eileen M. Uchitelle & Matthew Draper]
This commit is contained in:
Eileen Uchitelle 2018-09-12 10:09:59 -04:00
parent 3eb0406ef5
commit 349db176d8
2 changed files with 34 additions and 3 deletions

View file

@ -180,9 +180,7 @@ end_warning
end
initializer "active_record.set_executor_hooks" do
ActiveSupport.on_load(:active_record) do
ActiveRecord::QueryCache.install_executor_hooks
end
ActiveRecord::QueryCache.install_executor_hooks
end
initializer "active_record.add_watchable_files" do |app|

View file

@ -371,6 +371,39 @@ class LoadingTest < ActiveSupport::TestCase
end
end
test "active record query cache hooks are installed before first request" do
app_file "app/controllers/omg_controller.rb", <<-RUBY
begin
class OmgController < ActionController::Metal
ActiveSupport.run_load_hooks(:action_controller, self)
def show
if ActiveRecord::Base.connection.query_cache_enabled
self.response_body = ["Query cache is enabled."]
else
self.response_body = ["Expected ActiveRecord::Base.connection.query_cache_enabled to be true"]
end
end
end
rescue => e
puts "Error loading metal: \#{e.class} \#{e.message}"
end
RUBY
app_file "config/routes.rb", <<-RUBY
Rails.application.routes.draw do
get "/:controller(/:action)"
end
RUBY
require "#{rails_root}/config/environment"
require "rack/test"
extend Rack::Test::Methods
get "/omg/show"
assert_equal "Query cache is enabled.", last_response.body
end
private
def setup_ar!