检查Ruby连接是否存在?

Lan*_*ard 16 ruby browser internet-connection

刚刚问到如何使用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"}
Run Code Online (Sandbox Code Playgroud)

MrK*_*isF 19

require 'open-uri'

def internet_connection?
  begin
    true if open("http://www.google.com/")
  rescue
    false
  end
end
Run Code Online (Sandbox Code Playgroud)

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


Aut*_*ico 10

我喜欢每个人都认为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
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人:)


Sim*_*tti 5

你可以使用这Ping门课.

require 'resolv-replace'
require 'ping'

def internet_connection?
  Ping.pingecho "google.com", 1, 80
end
Run Code Online (Sandbox Code Playgroud)

该方法返回truefalse不引发异常.