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 への重複接続にあるようです。すでに localhost への接続が開いており、2 つ目の接続を開こうとしています。これは、たとえばThinのようなシングルスレッド Web サーバーでは機能しないようです。Pumaなどのマルチスレッド Web サーバーが役立ちます。

于 2016-07-18T16:20:14.217 に答える
0

これは、シングルスレッドの Web サーバーを使用しているためだと思います。修正する機会は 2 つあります。

  1. 乗客を使用する

  2. net/http を localhost にする意味があるかどうかを定義します。

于 2013-06-19T08:17:48.090 に答える