http request inside controller?

hi all, i got problem with net/http inside controller. I need to respond to action using some remote (not REST compatible) http server (actually returning pdf file) so inside action i use:

      response = Net::HTTP.new('1.2.3.4').request_get('/url')       send_data http_response.body, :filename => "test.pdf", :type => "application/pdf"

...with no luck :frowning: I got:

Timeout::Error in InvoicesController#pdf

execution expired

RAILS_ROOT: C:/work/z Application Trace | Framework Trace | Full Trace

c:/ruby/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill' c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout' c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout' c:/ruby/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill' c:/ruby/lib/ruby/1.8/net/protocol.rb:116:in `readuntil' c:/ruby/lib/ruby/1.8/net/protocol.rb:126:in `readline' c:/ruby/lib/ruby/1.8/net/http.rb:2029:in `read_status_line' c:/ruby/lib/ruby/1.8/net/http.rb:2018:in `read_new' c:/ruby/lib/ruby/1.8/net/http.rb:1059:in `request' c:/ruby/lib/ruby/1.8/net/http.rb:1046:in `request' c:/ruby/lib/ruby/1.8/net/http.rb:547:in `start' c:/ruby/lib/ruby/1.8/net/http.rb:1044:in `request' c:/ruby/lib/ruby/1.8/net/http.rb:957:in `request_get' app/controllers/invoices_controller.rb:48:in `pdf'

on ethereal i trully see that there is no response to GET but what is interesting the same net/http code inside rake task is successfuly downloading and saving the file locally.

What could be the problem with net/http requests inside controllers? i may only guess that in may not be thread safe or what as controllers use net/http mechanism for own pursposes. how to solve this issue - any ideas?

big thanks in advance

br

K

Hi,

Can you access any other sites using http from within your controllers? I see you are using Windows - does firewall allow your mongrels/ webrick to access Internet?

If it's timeout issue, you can easily increase timeout with net/http library like:

Net::HTTP.start('www.whatever.org.uk') { |http|          http.open_timeout = http.read_timeout = 60 # You increase timeout for connections          req = Net::HTTP::Get.new("/index.html")          resp = http.request(req)        }

page_content = resp.body

Best, H.

Hi,

Can you access any other sites using http from within your controllers?

yes, I can so it is not rails problem, thank you - i will examine remote server why it is not responding to every request