我在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
...它返回了正确的文章,包括未在网站上显示的文章。
只有重新启动服务器才能重置缓存并显示文章。
答案 0 :(得分:0)
我刚刚在heroku上创建了一个使用动作缓存的Rails项目。它适当地缓存请求15秒,然后刷新缓存。
你有没有可能不使用dalli宝石?
heroku addon:
heroku addons:add memcache:5mb
代码:
配置/ application.rb中
config.cache_store = :dalli_store
app / controllers / home_controller.rb
class HomeController < ApplicationController
caches_action :index, :expires_in => 15.seconds
def index
@timestamp = Time.now
end
end
应用程序/视图/家/ index.html.erb
<h1>hi!</h1>
I was generated at <%= @timestamp %>.