2

我在 3.1 中使用片段缓存。Rails 应用程序有一个片段没有过期,我不知道为什么。这是我想根据时间(每小时)过期的片段。我在 Heroku 上,使用 Memcachier Add-on 进行缓存。我似乎没有任何其他缓存问题。

在我的应用中,共有三个模型:用户、社区和活动。在 Community#index 上,有一个片段显示此社区中的用户的活动,我希望每小时过期。计算是 Activity 模型中的一种方法,工作正常 - 只是片段每小时到期(并且刷新)。

在我看来,我有:

<% cache("activity_#{community.id}", :expires_in => 1.hour) do %>               
    <-- content >      
<% end %>

我还尝试通过在 User 模型中添加缓存的过期时间来使其成为计划任务。

  def self.expire_activity
    Community.find_each do |community|
      ActionController::Base.new.expire_fragment('activity_#{community.id}')
    end
  end

我试图按照这个问题的答案来确定如何使模型中的缓存过期,但是使用这段代码,我得到了错误:

NoMethodError: undefine method 'expire_fragment' for #<Class:0x5ffc3e8>

4

1 回答 1

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

我知道这是一个老问题,但在搜索解决方案时在谷歌中返回很高。

于 2016-07-12T20:34:34.597 回答