处理Rails.cache.fetch中的错误

the*_*art 7 caching ruby-on-rails ruby-on-rails-4

我正在使用Rails.cache来缓存来自API的响应:

Rails.cache.fetch("key") do 
  api.get "/api/data"
  api.body
end
Run Code Online (Sandbox Code Playgroud)

API不是很可靠,偶尔我会收到500错误.我想避免缓存500响应.

Rails.cache.fetch("key") do 
  api.get "/api/data"
  if api.body.meta.status == 500
    # Bail out, Goose!
  end
  api.body
end
Run Code Online (Sandbox Code Playgroud)

我宁愿不提出异常.没有缓存的"拯救"块的最佳方法是什么?

Eri*_*man 5

我自己刚刚遇到了这个break问题,看起来会解决我们的问题。我只是在本地针对 memory_store 和 dalli_store 测试了它,它避免了缓存块。因此,对于您的示例,请尝试以下操作:

Rails.cache.fetch("key") do 
  api.get "/api/data"
  break if api.body.meta.status == 500
  api.body
end
Run Code Online (Sandbox Code Playgroud)

作为旁注,如果使用 dalli_store 它不会缓存 nil 值,因此您可以从块中返回 nil。