2

我在控制器操作中创建 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
4

2 回答 2

1

我今天也遇到了这个问题,完全是在相同的上下文中:使用Ruby RestClient在控制器内发出 HTTP 请求。它早些时候在另一个使用OpenURI的项目中工作,没有问题。这很令人惊讶,因为 Ruby 的 RestClient 和 OpenURI 这两个 http 库都使用同一个库 Net::HTTP

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

于 2016-07-18T16:20:14.217 回答
0

我认为这是因为您使用单线程 Web 服务器。你有两次修复的机会。

  1. 使用乘客

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

于 2013-06-19T08:17:48.090 回答