我有一个json api,我执行动作缓存:
class Api::V2::TagsController < Api::V2::BaseController
before_filter :set_cache_headers, :only => [:categories, :tribes]
caches_action :categories, :tribes, :expires_in => 1.hour
我发现此缓存过期的唯一方法是使用:
Rails.cache.delete api_v2_categories_url(:locale => nil)+'.json?'
这非常难看
任何人都可以帮助我改善这个可怕的黑客攻击吗?
更多信息:
缓存效果很好,我在日志中看到缓存写入:
Cache write: http://localhost:3000/api/v2/categories.json?
在管理员命名空间中,我需要使缓存过期,我已尝试过:
expire_action(:controller =&gt;&#39; / api / v2 / tags&#39;,:action =&gt;&#39; categories&#39;,:format =&gt;:json)
哪个失败并输出:
过期片段 视图/本地主机:3000 / MU-8c54ade2-cbb77ba0-4f0c28d3-607169d0.json行动=类别&安培;控制器= API / V2 /标记&安培;语言环境= FR
P.S:我尝试过这个答案没有成功:rails caching: expire_action in another namespace
答案 0 :(得分:0)
您可以在api中创建一个名为clear_categories的新路线,并在其中调用
expire_action :action => :categories
然后在你的管理员中点击那条路线。您还可以通过将重定向网址传递给clear_categories或其他类似内容来重定向回主叫管理页面。
答案 1 :(得分:0)
我有类似的问题,并使用下面的内容修复它,
expire_fragment(ActionCachePath.new(self, {
:controller => '/api/v2/tags',
:action => 'categories'
}, true).path)