jemtech008
jemtech008

Reputation: 41

http request (using net http or RestClient) inside my rails controller

I have problem creating http request inside my controller action. I used net/http and RestClient but I can't get it to work on my local server url i.e http://localhost:3000/engine/do_process, I always get requesttimeout however It works with other valid url.

Hope you can enlighten me on this one. I did some research but I can't find resources as to why I got this timeout problem.

Sample controller code:

require 'rest_client'

class LgController < ApplicationController
  def get_lgjson

     response =  RestClient.get("http://localhost:3000/engine/do_process_lg")
     @generated_json = response.to_str

  end
end

Upvotes: 2

Views: 3368

Answers (2)

0x4a6f4672
0x4a6f4672

Reputation: 28245

I encountered this problem today, too, exactly in the same context: using the Ruby RestClient to make a HTTP request inside a controller. It worked earlier in a different project using OpenURI without problems. This was surprising because both http libraries, the RestClient and OpenURI for Ruby, use the same library Net::HTTP.

It is the URL that makes the difference. We can make a connection to an external URL in the controller, but not to localhost. The problem seems to be the duplicated connection to localhost. There is already a connection to localhost open, and we are trying to open a second one. This does not seem to work in a single-threaded web server like Thin for instance. A multi-threaded web server such as Puma could help.

Upvotes: 1

Mike
Mike

Reputation: 1

I think this is because you use single-threaded web server. You have two opportunities to fix.

  1. use passenger

  2. define if it makes sense to make net/http to localhost.

Upvotes: 0

Related Questions