コンソールで実行すると一連の API 呼び出しを実行するスクリプトがあり、それは素晴らしく機能します。しかし、サーバーで実行すると、「getaddrinfo: 回復不能なエラーが発生しました..」というエラーが表示されます。
問題を引き起こしていると思われる私のコードの一部は次のとおりです。
require "uri"
require "net/http"
require "json"
uri = URI("https://api.domain.com/location/of/api_call/data.json?other=1&query=1&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 を使用してジョブをスケジュールする Dashing ダッシュボードを実行しています。これは、30 分ごとに実行するようにスケジュールしたジョブです。Dashing も Unicorn の代わりに Thin サーバーを使用します。
これが私が得る完全なエラーです:
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 = ...」にあります
アップデート:
APIアドレスでnslookupを実行し、取得しました
*** Default servers are not available
Server: UnKnown
Address: 127.0.0.1