Rails:从控制器执行HTTP POST后超时

时间:2013-02-20 01:00:49

标签: ruby-on-rails ruby post httparty net-http

Rails 3.1.3,ruby 1.9.3p374

我正在尝试从控制器发送POST(通过POST从客户端接收数据,然后先进行一些处理)到应用程序中的另一个控制器,并且我收到Timeout :: Error。

我尝试过使用Net :: HTTP(下面的长表格,也做了快捷方式):

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)

和HTTParty:

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

在这两种情况下,我都会收到Timeout :: Error,并在服务器输出中看到这一点:

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是正确的网址,并且有相应的路由。我一直在收到CSRF警告,所以我添加了:来自原始请求的authenticity_token但仍然显示CSRF警告。我不确定这是否与POST超时有关。

我觉得可能存在一些基本的网络或配置问题导致POST无法正常工作,但无法确定它是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先 - 可能只有一个工作人员忙于此请求,因此无法响应第二个请求。尝试在帖子中发帖,或者使用多个工作人员。

第二 - 你为什么要发布到应用程序本身?你为什么不干掉代码,从其他动作中提取所需的代码到一个方法,并在两个地方调用它?