我在控制器操作中创建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
答案 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服务器。你有两个机会来解决。
使用乘客
定义将net / http设为localhost是否有意义。