【发布时间】:2012-10-18 23:52:58
【问题描述】:
我有一个在 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
...它返回了正确的文章,包括没有出现在网站上的文章。
只有重新启动服务器才能完全重置缓存并显示文章。
【问题讨论】:
-
您是否尝试过在创建/更新方法期间使用显式过期而不是担心 :expires_in 参数?
-
另外,我什至没有在 Rails 的 caches_action 文档页面上看到 expires_in。 guides.rubyonrails.org/caching_with_rails.html#action-caching
-
嘿,我可以在这里看到使用 expires_in 和 caches_action 的解释:api.rubyonrails.org/classes/ActionController/Caching/…
-
使用显式更新或创建过期的问题是,缓存会在文章将在几天内上线时保存,我最终会遇到同样的问题?
标签: ruby-on-rails ruby heroku