ruby-on-rails Rails低级缓存未进行缓存

3htmauhk  于 2023-02-26  发布在  Ruby
关注(0)|答案(2)|浏览(162)

我有一个名为Event的模型,在事件模型中,我有以下代码:

def self.all_events
    Rails.cache.fetch("events", expires_in: 2.days) do
        Event.all.to_a
    end
end

我在一个控制器中调用了all_events方法。如果上面的方法有效,那么服务器日志应该只在第一次调用控制器代码时显示查询,并且在接下来的两天中,每次调用控制器代码时,事件都应该作为一个数组存在于内存中-对吗?出于某种原因,服务器日志每次都显示数据库查询。我如何使缓存工作呢?

q1qsirdb

q1qsirdb1#

您必须在两个环境中正确配置缓存设置。
我更喜欢在Heroku上使用Redis作为生产环境。您可以在开发环境中使用memory_store或file_store选项。https://elements.heroku.com/addons/heroku-redis
让菲尔

gem 'redis-rails'

配置/环境/生产.rb

Rails.application.configure do
  config.action_controller.perform_caching = true
  config.cache_store = :redis_store
end

配置/环境/开发.rb

Rails.application.configure do
  config.action_controller.perform_caching = true
  config.cache_store = :memory_store
end

您可以在那里找到更多关于Ruby on Rails缓存的细节;http://guides.rubyonrails.org/caching_with_rails.html

ktca8awb

ktca8awb2#

在开发和生产中检查缓存配置。在开发中,必须显式打开缓存(使用rails dev:cachetouch tmp/caching-dev.txt并重新启动开发服务器)。
注意 * development.rb * 中的缓存配置,

# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
if Rails.root.join("tmp/caching-dev.txt").exist?
  config.action_controller.perform_caching = true
  config.action_controller.enable_fragment_cache_logging = true

  config.cache_store = :memory_store
  config.public_file_server.headers = {
    "Cache-Control" => "public, max-age=#{2.days.to_i}"
  }
else
  config.action_controller.perform_caching = false
  config.cache_store = :null_store
end

默认情况下,开发中的缓存是关闭的,必须显式打开开发中的缓存,如Caching with Rails: An Overview文档所示。

相关问题