【问题标题】:Rails Fragment Cache Won't ExpireRails 片段缓存不会过期
【发布时间】:2013-01-14 22:10:03
【问题描述】:

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

在我的应用中,共有三种模型:用户、社区和活动。在 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

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

NoMethodError: undefine method 'expire_fragment' for #&lt;Class:0x5ffc3e8&gt;

【问题讨论】:

  • 您找到解决方案了吗?我也面临同样的问题。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多