我正在使用Net :: HTTP在Rails 3.0.3中进行试验,但由于Timeout ::错误。在Rails 3.0.3中使用Net :: HTTP导致超时::错误
我有两个控制器:控制器A通过控制器B.
控制器A(xml_provider_controller.rb)称为:
class XmlProviderController < ApplicationController
def availabilityByDateRequest
respond_to do |format|
format.xml # availabilityByDateRequest.xml.builder
end
end
end
文件 “availabilityByDateRequest.xml.builder” 是一个简单的静态XML哪些工作。
控制器B(mains_controller.rb):
require 'nokogiri'
require 'net/http'
require 'uri'
require "logger"
class MainsController < ApplicationController
def search
url = URI.parse("http://127.0.0.1:3000/xmlprovider/availabilityByDateRequest/")
http = Net::HTTP.new(url.host, url.port)
http.open_timeout = 10 # in seconds
http.read_timeout = 10 # in seconds
req = Net::HTTP::Post.new(url.path,
initheader = {'Content-Type' => 'application/xml',
'Accept' => 'application/xml'})
req.body = "<?xml version='1.0' encoding='UTF-8'?><somedata></somedata>"
res = http.request(req)
logger.debug res.body
xml_doc = Nokogiri::XML(res.body)
@results = xml_doc.xpath('//startLocation')
respond_to do |format|
format.html # search.html.erb
end
end
end
好的,因为只有一个静态XML是由控制器B返回但是没有在这一点上需要“req.body”,动态生成的XML将。被发送到控制器A和在未来相应地处理,所以我离开它在
我还定义了一个路线:
match 'xmlprovider/availabilityByDateRequest' => 'xml_provider#availabilityByDateRequest', :via => :post, :format => 'xml'
一旦我称为“http://0.0.0.0:3000/mains/search“,我得到一个Timeout :: Error。
日志说:
Started GET "/mains/search" for 127.0.0.1 at 2011-01-30 10:48:17 +0100
opening connection to localhost...
opened
<- "POST /xmlprovider/availabilityByDateRequest/ HTTP/1.1\r\nAccept: */*\r\nUser-Agent: Ruby\r\nConnection: close\r\nHost: localhost:3000\r\nContent-Length: 136\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n"
<- "<?xml version='1.0' encoding='UTF-8'?><somedata></somedata>"
Conn close because of error Timeout::Error
Timeout::Error (Timeout::Error):
app/controllers/mains_controller.rb:43:in `search'
Processing by MainsController#search as HTML
...
Started POST "/xmlprovider/availabilityByDateRequest/" for 127.0.0.1 at 2011-01-30 10:48:27 +0100
Processing by XmlProviderController#availabilityByDateRequest as XML
Parameters: {"<?xml version"=>"'1.0' encoding='UTF-8'?><somedata><name>Test Name 1</name><description>Some data for Unit testing</description></somedata>"}
Rendered xml_provider/availabilityByDateRequest.xml.builder (8.8ms)
Completed 200 OK in 14ms (Views: 13.9ms | ActiveRecord: 0.0ms)
根据日志,控制器B被调用,并返回XML(最后一行在日志中)。
但是,什么导致Timeout :: Error?就处理时间不足而言,这肯定不是“超时”。一些东西卡在某处,最有可能在线“res = http.request(req)”
就是这样......我建立了一个单独的rails应用程序...... – Scholle 2011-01-30 13:27:51