在 Rails 中启用查询缓存?



我注意到我的查询没有被缓存。我跑bundle exec rake middleware | grep Cache,它是空的。我尝试在config/application.rb中添加以下内容:

config.middleware.use ActiveRecord::QueryCache

但是,我得到:

rake aborted!
ArgumentError: wrong number of arguments (given 1, expected 0)
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37:in `initialize'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37:in `new'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37:in `build'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:131:in `block in build'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:127:in `each'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:127:in `inject'
/home/l/.rvm/gems/ruby-2.6.5/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:127:in `build'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/engine.rb:512:in `block in app'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/engine.rb:508:in `synchronize'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/engine.rb:508:in `app'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/application/finisher.rb:97:in `block in <module:Finisher>'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/initializable.rb:32:in `instance_exec'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/initializable.rb:32:in `run'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/initializable.rb:60:in `run_initializers'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/application.rb:363:in `initialize!'
/mnt/d/Dev/temp/blog/config/environment.rb:5:in `<main>'
/home/l/.rvm/gems/ruby-2.6.5/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
/home/l/.rvm/gems/ruby-2.6.5/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/l/.rvm/gems/ruby-2.6.5/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/l/.rvm/gems/ruby-2.6.5/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
/home/l/.rvm/gems/ruby-2.6.5/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/home/l/.rvm/gems/ruby-2.6.5/gems/zeitwerk-2.2.2/lib/zeitwerk/kernel.rb:23:in `require'
/home/l/.rvm/gems/ruby-2.6.5/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `block in require'
/home/l/.rvm/gems/ruby-2.6.5/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/home/l/.rvm/gems/ruby-2.6.5/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/application.rb:339:in `require_environment!'
/home/l/.rvm/gems/ruby-2.6.5/gems/railties-6.0.2.1/lib/rails/application.rb:515:in `block in run_tasks_blocks'
/home/l/.rvm/gems/ruby-2.6.5/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/home/l/.rvm/gems/ruby-2.6.5/bin/ruby_executable_hooks:24:in `eval'
/home/l/.rvm/gems/ruby-2.6.5/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => middleware => environment
(See full trace by running task with --trace)

我以为默认情况下应该启用查询缓存?为什么没有启用?如何启用它?

我正在使用 WSL。

查询缓存在轨道中的工作方式不同。它仅在请求内部应用,缓存在请求结束时被销毁,它不会在请求之间保持活动状态。

请参阅 SQL 缓存 https://guides.rubyonrails.org/caching_with_rails.html#sql-caching 的轨道指南

但是,请务必注意,查询缓存在操作开始时创建,并在操作结束时销毁,因此仅在操作持续时间内保留。如果要以更持久的方式存储查询结果,可以使用低级别缓存。

如果要在请求之间保留查询缓存,则必须使用低级别缓存自行实现它 https://guides.rubyonrails.org/caching_with_rails.html#low-level-caching

最新更新