Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 片段缓存未在30分钟内更新_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 片段缓存未在30分钟内更新

Ruby on rails 片段缓存未在30分钟内更新,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的碎片缓存设置将在30分钟内过期 <% cache(:expires_in => 30.minutes) do %> <!-- table with items --> <% end %> 30分钟)完成%> 它进行了第一次缓存,但现在表中的项正在更新,它仍然显示旧数据。自项目更新以来已过了数小时。我已清除浏览器中的缓存,但它仍使用它创建的第一个缓存 这是我第一次设置缓存,这样我可能会做错什么 更新 我不喜欢每次更新项目时都更新缓存。原因是每

我的碎片缓存设置将在30分钟内过期

<% cache(:expires_in => 30.minutes) do %>
   <!-- table with items -->
<% end %>
30分钟)完成%>
它进行了第一次缓存,但现在表中的项正在更新,它仍然显示旧数据。自项目更新以来已过了数小时。我已清除浏览器中的缓存,但它仍使用它创建的第一个缓存

这是我第一次设置缓存,这样我可能会做错什么

更新

我不喜欢每次更新项目时都更新缓存。原因是每个项目都有许多
,项目值就是表上显示的值。每次更新项目时,实际项目记录不会更新,但所有is值都会更新。如果每次更新一个值时缓存都会刷新,那么每次更新一个项时缓存都会刷新10次,因为所有这些项的值都会同时更新


因此,我认为每30分钟更新一次表就可以了。

我认为您使用的
fragment\u cache
并不完全正确

因为rails有
方法
,该方法的名称为:
expire\u fragment

<% cache(key, :expires_in => set_time_here) do %>
   <!-- content -->
<% end %>

expire_fragment(key) 
在此处设置时间)do%>
expire\u片段(键)
您可以重写为:

def expire_items_cache
  puts "expire_items_cache"
  expire_fragment("items") 
end

<% cache("items", expires_in: 30.minutes) do %>
   <!-- table with items -->
<% end %>
def过期\u项目\u缓存
将“过期\u项\u缓存”
过期\u片段(“项目”)
结束

你可以在

上查阅更多信息,我认为你使用的
片段缓存
并不准确

因为rails有
方法
,该方法的名称为:
expire\u fragment

<% cache(key, :expires_in => set_time_here) do %>
   <!-- content -->
<% end %>

expire_fragment(key) 
在此处设置时间)do%>
expire\u片段(键)
您可以重写为:

def expire_items_cache
  puts "expire_items_cache"
  expire_fragment("items") 
end

<% cache("items", expires_in: 30.minutes) do %>
   <!-- table with items -->
<% end %>
def过期\u项目\u缓存
将“过期\u项\u缓存”
过期\u片段(“项目”)
结束

您可以在

手动缓存过期失效时参考更多信息,尝试基于密钥的过期如果不提供手动缓存过期时间,则当对象更改时,密钥将自动更改,由于
处更新了\u,所以密钥将自动更改,新缓存将生成,您无需担心旧缓存,它为您提供了良好的解决方案,并在需要时将其清除(Memcache),因此请尝试此方法

<% cache([items,items.max(:updated_at)]) do %>
   <!-- table with items -->
<% end %>

还有一个,它不会缓存在浏览器中,而是留在服务器缓存存储中 并查找fragement缓存
也可以尝试观看此Railcast

手动缓存过期失效,尝试基于密钥的过期如果不提供手动缓存过期时间,则当对象更改时,密钥将自动更改,由于
处更新了\u,所以密钥将自动更改,新缓存将生成,您无需担心旧缓存,它为您提供了良好的解决方案,并在需要时将其清除(Memcache),因此请尝试此方法

<% cache([items,items.max(:updated_at)]) do %>
   <!-- table with items -->
<% end %>

还有一个,它不会缓存在浏览器中,而是留在服务器缓存存储中 并查找fragement缓存
请尝试观看此Railcast

关于“我已清除浏览器中的缓存…”的内容,我认为内容实际上缓存在
Rails中。缓存
,而不是浏览器的缓存。是的,但我认为可能是我的浏览器缓存了页面。关于“我已清除浏览器中的缓存…”--我认为内容实际上缓存在
Rails.cache
中,而不是浏览器的缓存中。是的,但我认为可能是我的浏览器缓存了页面。给出了错误<代码>没有将符号隐式转换为整数
会给出错误<代码>无符号到整数的隐式转换