2011-10-07 61 views
2

我在我的控制器动作中创建http请求时出现问题。我使用了net/http和RestClient,但是我无法在我的本地服务器网址上工作,例如http://localhost:3000/engine/do_process,我总是会收到requesttimeout,但是它可以与其他有效的url一起使用。我的导轨控制器内的http请求(使用网络http或RestClient)

希望你能指教我这个。我做了一些研究,但我无法找到资源,为什么我会遇到这个超时问题。

样品控制器代码:

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 
+4

请向我们显示创建请求的代码。我的钱是因为你正在向应用程序的另一部分发出另一个HTTP请求,并且由于WEBrick是一个单线程服务器,它不能在初始请求的同时提供它。 –

+0

需要 'rest_client' 类LgController jemtech008

+0

我总是请求超时问题,不知道为什么。 – jemtech008

回答

0

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

  1. 利用乘客

  2. 定义是否有意义,使网/ HTTP为localhost。

1

我今天遇到了这个问题,也正是在同样的情况下:使用Ruby RestClient使控制器内的HTTP请求。它早期在使用OpenURI的其他项目中工作没有问题。这是令人惊讶的,因为http库,Ruby的RestClient和OpenURI,use the same library Net::HTTP

这是造成差异的URL。我们可以连接到控制器中的外部URL,但不能连接到本地主机。该问题似乎是与本地主机的重复连接。已经有一个连接localhost打开,我们正在尝试打开第二个。这似乎不适用于像Thin这样的单线程Web服务器。多线程网络服务器(如Puma)可能会有所帮助。