Ruby on rails 如何检查是否在网站上找到图像?

Ruby on rails 如何检查是否在网站上找到图像?,ruby-on-rails,ruby,ruby-on-rails-3,image,web,Ruby On Rails,Ruby,Ruby On Rails 3,Image,Web,我正在使用Ruby on Rails v3.0.9,我想检查是否从网站成功检索到一个图像(在我的例子中是favicon.icoicon图像),如果没有,我想显示一个自定义图像 为了检索与网站相关的favicon.ico图像,在我的视图文件中,我有: image_tag "#{web_site.link}/favicon.ico", :size => "16x16" 其中web\u site.link值如下所示: http://stackoverflow.com/ http://www.s

我正在使用Ruby on Rails v3.0.9,我想检查是否从网站成功检索到一个图像(在我的例子中是
favicon.ico
icon图像),如果没有,我想显示一个自定义图像

为了检索与网站相关的
favicon.ico
图像,在我的视图文件中,我有:

image_tag "#{web_site.link}/favicon.ico", :size => "16x16"
其中
web\u site.link
值如下所示:

http://stackoverflow.com/
http://www.stackoverflow.com/
http://facebook.com/
...

如何检查是否在网站上找到图像(可能使用
if…else…end
语句或在处理favicon图像之前执行一些HTTP请求)以及如何处理上述场景?

除非在呈现页面之前获取图像服务器端,否则无法使用Rails执行此操作。您可以使用JavaScript在客户端获取它,如果检索它有困难,则切换到其他方法。

以下是如何实现您在原始问题中的想法

这种方法的问题是,您的响应时间将包括其他域响应您的图像请求所需的时间。如果该站点有 问题,则在请求超时之前您的页面不会加载

<%
img_url = 'http://adomain.com/image.jpg'
res = Net::HTTP.get_response(URI.parse(img_url))
img_url = '[my alternate url]' unless res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399
%>

<%=image_tag img_url%>
=200&&res.code.to_i<400#好的代码将在200-399之间
%>
jQuery方法要复杂一些。我建议如下:

  • 创建一个
    
    
  • 在故障回调中,替换
    
    

不幸的是,我现在没有时间为这个生成准确的代码。

在使用JavaScript呈现页面之前,如何获取图像服务器端(我使用的是jQuery 1.6)?您在这两方面都有选择,但gem可能是最好的选择。此外,还可以使用JavaScript下载服务器端或客户端,而不是两者都下载。只是需要有人验证链接是否有效,你只需要选择谁。如果您在服务器端执行此操作,您可能希望将其作为填充映射表的后台进程运行。为什么您建议我使用“抑制”gem而不是Ruby标准库?顺便说一句:我也听说过Typhous gem。那又如何?
curb
是基于libcurl构建的,它提供了比内置的
Net::HTTP
库更多的功能。我也认为它更容易使用,但也有其他替代方案,它们都做类似的事情。“不幸的是,我现在没有时间为这个生成准确的代码。”-(…我会试试我自己…你为什么在这里使用
?状态码可能是浮点而不是int吗?@new2cpp不知道我为什么使用
,编辑响应