从 S3 中拯救视图中的 403 禁止图像



我想在我的应用程序中拯救来自 S3 的每个 403 响应。它们大多位于图像标记中,从而破坏了视图中的图像。当图像标记没有引发异常,它们只是在视图中有损坏的图像时,我该如何在ApplicationController中做到这一点?

rescue_from ??? do |e|
  logger.debug "broken image: #{e}"
end

某些图像在帮助程序中呈现,如下所示:

def user_image(img_style)
 "<img src='#{asset.image(img_style)}' />"
end

其中asset.image(img_style)返回一个(在本例中为禁止的)URL。

其他的就像:

<%= image_tag document.other_asset.image(:small) %>

我猜没有单父控制器(保存ApplicationController)。

然而,有一个多态类(ImageAttachment)来存储图像。我应该事先在模型中获取它并引发错误吗?这不是涉及提出两次请求吗?

这个解决方案绝对是可怕的,并且使每个图像的请求数量增加了一倍,但为了完成起见:

def found?(style = :small)
  return true if URI.open(image(style))
rescue OpenURI::HTTPError => exception
  logger.debug exception.message
  false
end

一个更好的实现显然是在Javascript中,所以资源不必加载两次,但是由于问题始于Ruby,它也会到此结束。

最新更新