如果我像这样缓存rss响应:
<% cache do %>
<%= fetch_rss(http://example.org) %>
<% end %>
如果rss没有正确返回,我怎么能阻止它缓存?即如果fetch_rss返回异常或返回'Not Found'
答案 0 :(得分:0)
棘手。
一些想法。
您可以将fetch_rss调用拉入控制器。缓存实际上只是您的应用程序可用的哈希。所以这需要一些额外的工作,但可能是最直接的方法。显式检查缓存,如果缓存过时,则调用 fetch_rss 或从缓存中提取rss值并传入视图以正常渲染。
或者,您可能可以让您的fetch抛出错误,然后换行异常处理程序。如果有例外情况,您可以捕获并调用 expire_fragment 。
答案 1 :(得分:0)
将fetch_rss
方法移动到它所属的控制器中,然后处理已知的异常:
def index
begin
@rss = fetch_rss
# Caching can be done here ...
rescue InvalidRssError, NotFoundError => e
# ...
end
end
正如您所看到的,假设在获取RSS时没有异常,除非您获得成功,否则不需要过期或以其他方式更改缓存。