ruby-on-rails - 从 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
Whereasset.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,它也会在那里结束。
推荐阅读
- javascript - 单击其中的值时,Javascript 下拉列表会立即自行关闭
- maya - 如何为特定组名称选择多个对象或节点?(玛雅脚本)
- activemq-artemis - 核心网桥的 Artemis HA 配置
- mongodb - 如何从 Java 应用程序成功连接到经过 kerberos 身份验证的 mongod 实例?我在初始化 GSSAPI 凭据时遇到异常
- python - 简单的 Salesforce Wrapper 身份验证 Python
- c++ - 在 VSCode 中为 Curl 制作 MakeFile
- c++ - 301 在 GET 请求上永久移动(某些站点) C++
- python - 将两个列表一个接一个地组合在一起
- python - Digital Ocean App:两个组件之间通过 ZMQ 进行通信
- text - 学习对象数据集(在电子学习中)