1

我在一个小型 sinatra 应用程序中工作,我希望它获取一个 json 文件以供以后使用。使用浏览器,我可以访问 json 就好了,也在 irb 上:

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 bad gateway 错误。有什么帮助吗?

我如何得到@graphite_all_metrics:

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

2 回答 2

0

您的join

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

正在向 URL 添加双斜杠。利用

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

或者只是从您的示例中删除一个斜杠。

大多数浏览器/程序将修复双斜杠错误,但您的服务器设置可能存在一些问题。

于 2013-05-29T18:56:23.517 回答
0

解决了。这是一个配置错误的多域 dns。与红宝石无关。

于 2013-05-29T20:10:25.047 回答