我的rails控制器内的http请求(使用net http或RestClient)

时间:2011-10-07 03:10:10

标签: ruby-on-rails ruby ruby-on-rails-3 rest-client net-http

我在控制器操作中创建http请求时遇到问题。我使用net / http和RestClient,但我不能让它在我的本地服务器url上工作,即http://localhost:3000/engine/do_process,我总是得到requesttimeout但是它适用于其他有效的URL。

希望你能在这一点上给我启发。我做了一些研究,但我找不到资源,为什么我有这个超时问题。

示例控制器代码:

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

2 个答案:

答案 0 :(得分:1)

我今天也遇到了这个问题,完全在同一个环境中:使用Ruby RestClient在控制器内发出HTTP请求。它在使用OpenURI的不同项目中更早地工作而没有问题。这是令人惊讶的,因为http库,RestClient和OpenURI for Ruby,use the same library Net::HTTP

这是影响差异的网址。我们可以连接到控制器中的外部URL,但不能连接到localhost。问题似乎是与localhost的重复连接。已经有一个与localhost打开的连接,我们正在尝试打开第二个。例如,这似乎不适用于Thin这样的单线程Web服务器。诸如Puma之类的多线程Web服务器可以提供帮助。

答案 1 :(得分:0)

我认为这是因为您使用的是单线程Web服务器。你有两个机会来解决。

  1. 使用乘客

  2. 定义将net / http设为localhost是否有意义。