0

Rails 3.1.3, ruby 1.9.3p374

I am trying to POST from a controller (which receives data via POST from client and then does some processing first) to another controller in the app, and am getting Timeout::Error.

I have tried using Net::HTTP (long form below, also did shortcut form):

uri = URI.parse(credit_payments_url)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
auth_token = params[:authenticity_token]
request.set_form_data({:cc => "test", :authenticity_token => auth_token })
response = http.request(request)

And HTTParty:

auth_token = params[:authenticity_token]
HTTParty.post(credit_payments_url, :body => {:cc => "test", :authenticity_token => auth_token})

In both cases, I get the Timeout::Error, and also see this in the server output:

Started POST "/payments/credit" for 127.0.0.1 at 2013-02-19 17:39:35 -0600
  Processing by PaymentsController#credit as HTML
  Parameters: {"cc"=>"test", "authenticity_token"=>"px+YzdbEfC5p2i3e5yjNT4EQy4WMA9aEWY/v2tfdFhA="}
WARNING: Can't verify CSRF token authenticity

credit_payments_url is the correct url and there is a corresponding route. I've been getting the CSRF warning so I added :authenticity_token from the original request but the CSRF warning still shows up. I'm not sure if that has anything to do with the POST timing out.

I feel like there may be some basic network or configuration issue causing the POST to not work, but can't quite tell what it is. Any ideas?

rrw4
  • 61
  • 2

1 Answers1

0

First - Probably, you have just one worker, busy in this request, and therefore unable to respond the second request. Try to make the post inside a thread, or use more than one worker.

Second - Why are you posting to the app itself? Why don't you dry the code, extracting the needed code from the other action to a method, and calling it in both places?

Cristopher
  • 325
  • 1
  • 11