#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
, чтобы проверить, что это то, что вы ожидаете?