2017-02-16 6 views
0

私のビューに同じアプリケーション内にあるWebサービスの結果が必要なので、私はそのように動いています:コントローラの操作で同じレールアプリケーション内のリンクに行くことができません

class MerchantsController < ApplicationController 
    def list 
    @cuisines = HTTParty.get('http://localhost:3000/v1/cuisines') 
    end 
end 

http://localhost:3000/merchants/listのようにこのアクションを実行すると、読み込みに時間がかかり、最終的にNet::ReadTimeout例外が発生します。

私はそのインスタンスを指すときHerokuのに配備同じアプリがそう、それが正常に動作します:

class MerchantsController < ApplicationController 
    def list 
    @cuisines = HTTParty.get('http://bogoapi.herokuapp.com/v1/cuisines') 
    end 
end 

は、それに対する解決策はありますか?そうでない場合、何がこのように振る舞うのでしょうか?

答えて

0

WEBrick - Railsのデフォルトビルドインサーバーは、シングルスレッドサーバーです。 Wiki。 1回の呼び出しで、最初の要求のロジック内で別の呼び出しを行います。あなたの2番目のリクエストは、最初のリクエストが完了するまで決して実行されません。

私は、herokuインスタンスは正常に動作すると思います。これはマルチスレッドです。しかし、代わりにコードを変更することを提案します。たとえば、別のサービスをレールエンジンにすることができます。

+0

まず、私はレール5を使用していないので、Webrickはデフォルトでそのプーマを使用していません。次に、このシナリオでは、herokuがマルチスレッドであるかどうかは関係ありません。アプリケーション自体が 'localhost'上で動作しているからです。 – Farooq

関連する問題