我正在尝试在RoR中创建一个站点,并为某些页面和操作启用了缓存。每次都可能无法访问相关的DB,因此非常需要使用缓存。因此,我无法等待某人实际访问该页面,渲染它然后缓存它。相反,我希望以编程方式手动缓存任何可缓存的内容。它实际上是否可能或者是否在RoR中完全自动缓存?
答案 0 :(得分:0)
懒惰*解决方案是使用lynx甚至curl作为部署过程的一部分访问页面。这将从外部触发缓存事件,但是在您选择的时候。
(*)懒惰,我希望。
答案 1 :(得分:0)
查看此page_cache plugin。看起来这就是你所需要的。
答案 2 :(得分:0)
我正在进行手动缓存触发,看起来您可以使用actionpack-page_caching插件的内置API来手动触发页面缓存的创建。您需要将cache_page(content, path, extension = nil, gzip = Zlib::BEST_COMPRESSION)
函数与属性一起使用(在https://github.com/rails/actionpack-page_caching/blob/master/lib/action_controller/caching/pages.rb处查看第80行)。这里我做了一个示例动作,它迭代了一些集合,并为这个集合的每个项目制作了“show”方法的缓存。
def precompile
@pages = Page.all
@pages.each do |page|
@page = page
cache_page(render_to_string(template: 'pages/show'), url_for(action: :show, id: @page, only_path: true))
end
redirect_to '/'
end
我的代码的url_for(action: :show, id: @page, only_path: true)
部分不是很干净,但它是我需要的第一个代码版本,欢迎任何重构。
此外,此代码将在每次触发时覆盖缓存文件,而不检查任何更改或过期。
答案 3 :(得分:-1)
参考: - Link
class ProductsController < ActionController
caches_page :index
def index
end
end
在环境config / environments / development.rb
中将执行缓存设置为trueconfig.action_controller.perform_caching = true