2013-05-29 3 views
1

Im работает в небольшом приложении sinatra, которое я хочу, чтобы он извлекал json-файл для последнего использования. Используя браузер, я могу получить доступ к JSON просто ОК, а также на IRB:Net :: HTTPBadGateway при попытке получить некоторый JSON

1.9.2p320 :001 > require 'open-uri' 
=> true 
1.9.2p320 :002 > metrics = open "http://foo-bar.com:8085/metrics/index.json" 
=> #<File:/tmp/open-uri20130529-12715-1upc3bm> 
1.9.2p320 :003 > metrics.read 
=> "[\"carbon.agents.io-a.avgUpdateTime\", \"carbon.agents.io-a.cache.overflow\", \"carbon.agents.io-a.cache.queries\", \"carbon.agents.io-a.cache.queues\", \"carbon.agents.io-a.cache.size\", \"carbon.agents.io-a.committedPoints\", \"carbon.agents.io-a.cpuUsage\", \"carbon.agents.io-a.creates\", \"carbon.agents.io-a.errors\", \"carbon.agents.io-a.memUsage\" ... 

возвращает мне нужный файл.

Но когда я пытаюсь сделать то же самое с sinatra_app.rb:

get '/json' do 
    @all_metrics = open @graphite_all_metrics 
    erb :json 
end 

или

get '/json' do 
    @all_metrics = Net::HTTP.get_response(URI @graphite_all_metrics) 
    erb :json 
end 

возвращает мне 502 недопустимую ошибку шлюза. Любая помощь?

Как я получить @graphite_all_metrics:

@graphite_base = "http://foo-bar.com:8085/" 
@graphite_all_metrics = [@graphite_base, "/metrics/index.json"].join 

ответ

0

Решено. Это была неправильно сконфигурированная многодоменная dns. Ничего с рубином.

0

Ваш join

@graphite_all_metrics = [@graphite_base, "/metrics/index.json"].join 

добавляет двойную косую черту в URL. Используйте

@graphite_all_metrics = File.join(@graphite_base, "/metrics/index.json") 

или просто удалите одну из косых черт из вашего примера.

Большинство браузеров/программ исправят ошибки с двойной косой чертой, но может возникнуть проблема с настройкой вашего сервера.

+0

ставит @graphite_all_metrics, и все в порядке, нет двойных косых черт. http://foo.bar:8085/metrics/index.json Также hardcoding URI дает мне те же 502 –