1

我有一个在 Heroku 上运行的 RoR 应用程序。在我的控制器中,我运行了简单的 caches_action 语句,例如:

caches_action :index, :expires_in => 5.minutes

def index 
    @articles = Article.main.paginate(:page => params[:page], :per_page => 10)
    ....
end

在文章模型中,项目是根据其发布日期使用范围声明检索的,如下所示:

scope :before, lambda{|timenow| {:conditions => ["time <= ?", timenow]}}
scope :published, where(:published => true).order("time DESC")
scope :main, before(Time.now).published

即使我将 caches_action 设置为 5 分钟,我仍然必须进入并手动清除缓存,以便今天的文章显示在列表的顶部,在它们应该上线几个小时后。Heroku 或 Rails 上是否有全局缓存设置我在某处丢失?

更多信息:

今天,当一篇新文章没有出现时,我尝试进入控制台并输入:

Rails.cache.clear

这没有效果。然后我尝试使用与索引控制器相同的 ActiveRecord 请求:

Article.main

...它返回了正确的文章,包括没有出现在网站上的文章。

只有重新启动服务器才能完全重置缓存并显示文章。

4

1 回答 1

0

我刚刚在 heroku 上创建了一个使用动作缓存的 Rails 项目。它适当地将请求缓存 15 秒,然后刷新缓存。

有没有可能你没有使用 dalli gem?

heroku 插件:

heroku addons:add memcache:5mb

编码:

配置/应用程序.rb

config.cache_store = :dalli_store

应用程序/控制器/home_controller.rb

class HomeController < ApplicationController

  caches_action :index, :expires_in => 15.seconds
  def index
    @timestamp = Time.now
  end
end

应用程序/views/home/index.html.erb

<h1>hi!</h1>
I was generated at <%= @timestamp %>.
于 2012-10-17T19:14:00.567 回答