Gem 为 Grape 和 Jbuilder 的非 Rails 应用增加缓存的 Gem

victor · 2013年12月19日 · 最后由 Victor 回复于 2013年12月19日 · 5780 次阅读

使用 Grape 做 API 的兄弟们如果使用 Jbuilder 来构建模板。想用 HTTP caching 的话可以考虑一下这个 Gem

https://github.com/wjp2013/grape-shaman_cache

仅在非 Rails 应用上,测试通过。

这也要 gem?

jbuilder 本身就有 cache! 方法……

#2 楼 @aptx4869 #1 楼 @hooopo

似乎你们没注意我说的是 HTTP caching

#3 楼 @Victor Rack Cache 更完备一些。。

#2 楼 @aptx4869 jbuilder 的 cache! 方法应该只能在 rails (或者 ActionView ) 里使用

#4 楼 @hooopo 弱弱的问,你用过 Rack Cache 么?

为避免你误会我第一句是反讽你不懂装懂。我要声明一下,我是诚心求教,如果在使用 Rack Cache 有什么心得体会,请不吝赐教。使用这套解决方案之前,我试图用 Rack Cache 来解决问题,毕竟没人喜欢重复造轮子,结果很沮丧,也许是我用的不对。本道士英文比较差,读了很久文档也没发现 Rack Cache 如何设定给某些请求 不加缓存 以及如何设置某一缓存 定时失效。如果要全站静态化的话,选择 Rack Cache 用起来倒是够简单。

没用过 rack cache,不过整页缓存用 varnish 吧,效率高,也能设置缓存时间。

#6 楼 @Victor #4 楼 @hooopo 有条件用 varnish 更好

#8 楼 @zhangyuan #9 楼 @ShiningRay 现在还没到那个数量级

  1. 为什不需要 gem,贴一下 sinatra + rabl 的,静态化、HTTP cache、temple cache、JSON cache 都有了。 ruby get "/v1/products" do @products = Product.xxxxxxxx.per(params[:per_page] || 20).order(params[:order] || "id DESC") etag(@cache_key = Digest::MD5.hexdigest([@products.map{|product| product.updated_at}, request.query_string].join)) render :rabl, :"v1/products/index", :format => "json" end

products/index.rabl

object false

cache [:products, @cache_key]

child(:meta) do
  node(:pagination){|_| pagination_hash(@products)}
  node(:message){|_| @message}
end

node(:data) do
  partial("v1/products/_product", :object => @products)
end

静态化:

get "/v1/global_nav" do
  expires 2.weeks, :public, :must_revalidate
  etag(@cache_key = [Time.now.strftime("%Y%m"), "global_nav", request.query_string].join)
  # logic here
   render :rabl, :"v1/global_nav", :format => :json
end

#11 楼 @hooopo 感谢分享,我好好读一下。不过我没用 sinatra

需要 登录 后方可回复, 如果你还没有账号请 注册新账号