2013-03-01 13 views
12

olarak ayarlayın. Yakut kodumdaki servis çağrısı için varsayılan zaman aşımını geçersiz kılmak istiyorum. Bağlantıyı aşağıdaki gibi açtım. Servis çağrısının read_timeout öğesini Ruby Net :: HTTP.start

res = Net::HTTP.start(@@task_url.host, @@task_url.port) do |http| 
    http.get("/tasks/#{task_id}") 
end   

ben altında olduğu read_timeout zamanı ayarlamak çalıştı ama sonra benim kodunda NoMethodError istisna var.

res = Net::HTTP.start(@@task_url.host, @@task_url.port) 
res.read_timeout = 10 
res do |http| 
    http.get("/tasks/#{task_id}") 
end 

Okumanın nasıl yapıldığını read_timeout. Ve ben tüm dünya çapında bir yerde read_timeout ayarlamak için arıyorum, bu yüzden tüm servis çağrımı için Net: HTTPP.start()

+0

olası yinelenen ::: böyle start(address, ..., opt, &block)

HTTP zaman aşımı] (http: // stackove rflow.com/questions/2229194/ruby-nethttp-time-out) ayrıca HTTP.start ile de 'read_timeout' ayarını yapın. –

cevap

15

Eğer Net::HTTP.new kullanmak zorunda: Eğer Net::HTTP.start ait source code bakarsak

http = Net::HTTP.new(host, port) 
http.read_timeout = 10 

response = http.get("/")  
# or intead of above line if you need block 
# http.start do 
# response = http.get("/") 
# end 

, bunu göreceksiniz ::start::new'u #start yöntemiyle arıyor:

# File net/http.rb, line 439 
def HTTP.start(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil, &block) # :yield: +http+ 
    new(address, port, p_addr, p_port, p_user, p_pass).start(&block) 
end 

> = Yakut 1,9

Sen opt argument yılında read_timeout ayarlayabilirsiniz:

res = Net::HTTP.start(host, port, :read_timeout => 10) 
[Yakut Net
+0

Hata alıyorum "Hash içine String dönüştürebilirsiniz" – manyu

+0

Bir yere (gist.github.com) çalıştığınız kod parçası gönderebilir miyim? –

+0

"irb" yi deneyin, sadece "net/http" gerektirir; is = Net :: HTTP.start (your_host, your_port,: read_timeout => 10) 'çalışırsa. –

1

Kullanabilirsiniz OpenURI. Bu yöntem, :read_timeout seçeneğine sahiptir. Seçeneği global olarak nasıl ayarlayacağımı bilmiyorum, ancak bu seçeneği belirleyen özel bir işlev içinde sarabilirsiniz.

require 'open-uri' 
module NetCustom 

    def open_url(url, &task) 
    open(url, :read_timeout => 20) do |file| 
     yield file.read 
    end 
    end 

end 

Kullanımı: Eğer Ruby 1.8 kullanırsanız

class Foo 
    include NetCustom 

    def bar 
    open_url('http://example.org/tasks/') do |content| 
     # Handle page text content 
    end 
    end 
end 
+0

teşekkürler, ama sadece başlamakla bunu yapmak istiyorum. – manyu

İlgili konular