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:
parent
3eb0406ef5
commit
349db176d8
2 changed files with 34 additions and 3 deletions
|
@ -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|
|
||||
|
|
|
@ -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!
|
||||
|
|
Loading…
Reference in a new issue