getaddrinfo: произошла неустранимая ошибка — ruby net/http-запрос

#ruby #sockets #net-http #dashing

#ruby #сокеты #net-http #стремительный

Вопрос:

У меня есть скрипт, который при запуске в консоли выполняет серию вызовов API, и он работает замечательно. Но когда я запускаю его на сервере, я получаю сообщение «getaddrinfo: произошла неустранимая ошибка ..» ошибка

вот фрагмент моего кода, который, похоже, вызывает проблемы:

 require "uri"
require "net/http"
require "json"
uri = URI("https://api.domain.com/location/of/api_call/data.json?other=1amp;query=1amp;stuff=1")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
headers = {"Range" => "bytes=1000-",
           "Api-Key" => API_KEY,
           "X-Api-Secret" => API_SECRET}
response = ""
res = http.get(uri.path   "?"   uri.query, headers) do |data|
    response  = data
end
if res.code.to_i === 200
    response = JSON.parse(response)
else
    response = {"error" => "api call failed"}
end
  

Довольно просто… Мне пришлось немного помассировать объект http и res, чтобы получить желаемые результаты. Это отлично работает с консоли, но когда я запускаю сервер, я получаю ошибки.

контекст: я запускаю потрясающую панель мониторинга, которая использует rufus-scheduler для планирования заданий. Это задание, которое я запланировал выполнять каждые 30 минут. Dashing также использует тонкий сервер вместо Unicorn.

Вот полная ошибка, которую я получаю:

 scheduler caught exception:
getaddrinfo: A non-recoverable error occurred during a database lookup.
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `initialize'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `open'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `block in connect'
c:/Ruby2.0.0/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:877:in `connect'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:851:in `start'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:1367:in `request'
c:/Ruby2.0.0/lib/ruby/2.0.0/net/http.rb:1126:in `get'
c:/path/to/file.rb: 215:in `block in <top (required)>'
  

Примечание: строка 215 находится в «res = …»

Обновить:

Я выполнил nslookup по адресу api и получил

 *** Default servers are not available
Server:  UnKnown
Address:  127.0.0.1
  

Комментарии:

1. может быть, это просто тайм-аут?

2. также глупый вопрос — ваш API_KEY / SECRET настроен правильно?

3. Я действительно сомневаюсь в этом, у меня такое чувство, что это больше связано с DNS. Я был на localhost, но переключился на использование 127.0.0.1. Однако это не решило проблему. Как мне проверить, истекло ли время ожидания?

4. да, это работает с консоли, поэтому api / secret работают нормально. Я просто удалил ее для публикации.

5. консоль часто представляет собой другую среду… поэтому стоит спросить / проверить 🙂 тем более, что его асинхронный запуск часто не включает все rails. можете ли вы сделать puts все ваши соответствующие данные непосредственно перед http.get , чтобы проверить, что это то, что вы ожидаете?