检查Ruby连接是否存在?

刚刚问到如何使用javascript检查是否存在互联网连接,并获得了一些很好的答案。 在Ruby中最简单的方法是什么? 在尝试使生成的html标记代码尽可能干净时,我想有条件地渲染javascript文件的脚本标记,具体取决于是否存在Internet条件。 像(这是HAML)的东西:

- if internet_connection? %script{:src => "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", :type => "text/javascript"} - else %script{:src => "/shared/javascripts/jquery/jquery.js", :type => "text/javascript"} 

您可以使用Ping类。

 require 'resolv-replace' require 'ping' def internet_connection? Ping.pingecho "google.com", 1, 80 end 

该方法返回truefalse ,不会引发exception。

 require 'open-uri' def internet_connection? begin true if open("http://www.google.com/") rescue false end end 

这更接近OP正在寻找的东西。 它适用于Ruby 1.8和1.9。 它也有点清洁。

我喜欢每个人都认为googles服务器正常运行。 信用谷歌。

如果你想知道你是否有互联网而不依赖谷歌,那么你可以使用DNS来查看你是否能够获得连接。

您可以使用Ruby DNS Resolv尝试将URL转换为IP地址。 适用于Ruby版本1.8.6+

所以:

 #The awesome part: resolv is in the standard library def has_internet? require "resolv" dns_resolver = Resolv::DNS.new() begin dns_resolver.getaddress("symbolics.com")#the first domain name ever. Will probably not be removed ever. return true rescue Resolv::ResolvError => e return false end end 

希望这有助于某人:)

与Simone Carletti的答案基本相同,但与Ruby 2兼容:

 # gem install "net-ping" require "net/ping" def internet_connection? Net::Ping::External.new("8.8.8.8").ping? end 
 require 'open-uri' page = "http://www.google.com/" file_name = "output.txt" output = File.open(file_name, "a") begin web_page = open(page, :proxy_http_basic_authentication => ["http://your.company.proxy:80/", "your_user_name", "your_user_password"]) output.puts "#{Time.now}: connection established - OK !" if web_page rescue Exception output.puts "#{Time.now}: Connection failed !" output.close ensure output.close end 
 def connected? !!Socket.getaddrinfo("google.com", "http") rescue SocketError => e e.message != 'getaddrinfo: nodename nor servname provided, or not known' end 

由于它使用主机名,它需要做的第一件事是DNS查找,如果没有互联网连接,则会导致exception。