Ruby on rails 如何从地图中的OpenURI中拯救404
我正在制作一张地图,以便为PDF导出适当地格式化一些数据。其中一部分是使用OpenURI打开图像。然而,我遇到的问题是,一些图像链接是指向外部站点的,并且已断开。所以我随机得到404个错误 我试着在地图上进行营救,但它出错了。我尝试过在方法中进行救援,但没有得到任何数据。正确的方法是什么 理想情况下,我希望将图像设置为服务器上的占位符图像。最好先定义一个单独的方法来处理这个问题吗 以下是我目前的方法:Ruby on rails 如何从地图中的OpenURI中拯救404,ruby-on-rails,ruby,open-uri,Ruby On Rails,Ruby,Open Uri,我正在制作一张地图,以便为PDF导出适当地格式化一些数据。其中一部分是使用OpenURI打开图像。然而,我遇到的问题是,一些图像链接是指向外部站点的,并且已断开。所以我随机得到404个错误 我试着在地图上进行营救,但它出错了。我尝试过在方法中进行救援,但没有得到任何数据。正确的方法是什么 理想情况下,我希望将图像设置为服务器上的占位符图像。最好先定义一个单独的方法来处理这个问题吗 以下是我目前的方法: def wish_list_item_rows WishListItem.wher
def wish_list_item_rows
WishListItem.where(:wish_list_id => @wish_list.id).map { |wishlistitem| [wishlistitem.product.name, {:image => open(wishlistitem.product.image_url)}] }
end
您可以在地图块中进行救援(您可能会稍微偏离语法),但将救援移动到自己的方法通常会更干净。将
open
替换为对以下方法的调用
def safe_open(url)
open(url)
rescue # put a specific error class here ideally
load_placeholder_image
end
完成代码:
def safe_open(url)
if url.blank?
safe_open = "#{Rails.root}/app/assets/images/placeholder.png"
else
open(url)
end
rescue OpenURI::HTTPError => e
if e.message == '404 Not Found'
safe_open = "#{Rails.root}/app/assets/images/placeholder.png"
end
end
我想补充一点,从错误中执行
救援
相对来说是一项非常耗时的任务,因此我建议看看是否有一种方法可以在不使用异常的情况下检查404错误是否发生。嘿@JeremyRodi,关于如何实现这一点,有什么想法吗?这对我来说很有效,但请理解你的观点。我想听听你的意见thoughts@bnusseyopenuri
在引擎盖下使用Net::HTTP
,因此您可能可以使用它。或者,您可以使用HTTP gem为您执行请求。如果您希望PDF的断开链接少于100个,并且您在一秒钟内生成的PDF不超过几个,那么用于从错误中恢复的额外时间应该不会太长。