Проверьте, существует ли интернет-соединение с Ruby? - PullRequest
15 голосов
/ 05 марта 2010

Только что спросили, как проверить, существует ли интернет-соединение с использованием javascript , и получили отличные ответы.Какой самый простой способ сделать это в Ruby?Пытаясь сделать сгенерированный HTML-код разметки как можно более чистым, я хотел бы условно отобразить тег сценария для файлов javascript в зависимости от того, есть ли условие Интернета.Что-то вроде (это ХАМЛ):

- 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"}

Ответы [ 6 ]

19 голосов
/ 30 ноября 2011
require 'open-uri'

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

Это ближе к тому, что ищет ОП. Работает в Ruby 1.8 и 1.9. Это тоже чище.

10 голосов
/ 03 апреля 2014

Мне нравится, что все просто предполагают, что серверы Google работают. Кредиты в Google.

Если вы хотите узнать, есть ли у вас интернет, не полагаясь на Google, вы можете использовать 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

Надеюсь, это кому-нибудь поможет:)

4 голосов
/ 05 марта 2010

Вы можете использовать Ping класс.

require 'resolv-replace'
require 'ping'

def internet_connection?
  Ping.pingecho "google.com", 1, 80
end

Метод возвращает true или false и не вызывает исключений.

2 голосов
/ 09 июля 2015

Те же основы, что и в Ответ Симоны Карлетти , но совместим с Ruby 2 :

# gem install "net-ping"

require "net/ping"

def internet_connection?
  Net::Ping::External.new("8.8.8.8").ping?
end
1 голос
/ 14 февраля 2011
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
0 голосов
/ 03 апреля 2014
def connected?
  !!Socket.getaddrinfo("google.com", "http")  
rescue SocketError => e
  e.message != 'getaddrinfo: nodename nor servname provided, or not known'
end

Поскольку он использует имя хоста, первое, что ему нужно сделать, - это поиск DNS, который вызывает исключение, если нет подключения к Интернету.

...