我在3.1中使用片段缓存。 Rails app并且有一个片段没有过期,我不知道为什么。这是一个我希望根据时间(每小时)过期的片段。我在Heroku上,使用Memcachier Add-on进行缓存。我似乎没有任何其他缓存问题。
在我的应用中,有三种模式:用户,社区和活动。在社区#index上,有一个片段显示我希望每小时过期的社区中的用户活动。计算,这是Activity模型中的一个方法,工作正常 - 只是片段每小时到期(并刷新)。
在我看来,我有:
<% cache("activity_#{community.id}", :expires_in => 1.hour) do %>
<-- content >
<% end %>
我还尝试通过在用户模型中为缓存添加过期来使其成为计划任务。
def self.expire_activity
Community.find_each do |community|
ActionController::Base.new.expire_fragment('activity_#{community.id}')
end
end
我尝试按照此question的答案来确定如何使模型中的缓存失效,但是使用此代码,我收到错误:
NoMethodError: undefine method 'expire_fragment' for #<Class:0x5ffc3e8>
答案 0 :(得分:0)
我在Rails 4.2.1上遇到了类似的问题。这是由服务器设置时区与rails应用程序的时区不匹配引起的。将两者设置为相同的问题解决了我的问题。
在服务器上,假设Ubuntu,以root身份运行此命令并按照提示进行操作:
dpkg-reconfigure tzdata
在application.rb
配置文件中,请确保以下行与服务器匹配(默认为UTC)。
# config.time_zone = 'Central Time (US & Canada)'
要获取rails的可用时区列表,请运行:
bundle exec rake time:zones:all
我知道这是一个老问题,但在搜索解决方案时会在google中返回。