Rails Fragment Cache不会过期

时间:2013-01-30 22:29:29

标签: ruby-on-rails-3 caching memcached

我在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>

1 个答案:

答案 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中返回。