我在Heroku上使用:expires_in选项在我的Rails 3应用上使用动作缓存。我已经尝试在更新时直接在控制器中调用expire_action,并且在扫描器内。似乎没有任何东西正确地使缓存条目失效。
在我的控制器中:
caches_action :embed, :if => Proc.new { |c| c.request.format.js? || c.request.format.rss? }, :expires_in => 5.minutes
在我的行动中:
expire_action :action => :embed, :format => :js
我还尝试使用网址生成器来获取确切密钥:
expire_action obj_embed_url(@obj.unique_token)
我想知道它是否是Heroku使用Varnish缓存层,你不能过期。 (缓存在5分钟后明确到期,因为我可以看到内容更新。)看来我正确配置了memcached外接程序(使用Dalli gem; config.cache_store =:dalli_store),我可以看到适当的环境变量......
$ heroku config |grep MEM
MEMCACHE_PASSWORD => xxxxxxxxxxxxxxxxx
MEMCACHE_SERVERS => xxx.xxx.northscale.net
MEMCACHE_USERNAME => appxxxxxx%40heroku.com
我在这里缺少什么?
答案 0 :(得分:1)
终于想通了。
Heroku的路径不得与expire create / expire调用匹配。因此,如果您在缓存创建中指定路径,并在expire中专门调用该路径,则它将起作用。我也必须使用" expire_fragment"而不是" expire_action"。这是我的代码:
在您的控制器中:
caches_action :load, :up, :juice, :fresh, :cache_path => :custom_cache_path.to_proc
def custom_cache_path
path = "#{params[:controller]}/#{params[:action]}"
path += "/#{params[:id]}" if params[:id]
path += "/#{params[:sha]}" if params[:sha]
path
end
在到期方法中:
expire_fragment "serve/up/#{@site.id}"
expire_fragment "serve/fresh/#{@site.secret}"