2017-02-16 45 views
0

我想要一個web服務(位於同一應用程序)在我看來的結果,所以我取它的行動,如:將通過一個控制器的動作在同一Rails應用程序鏈接不起作用

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。 您在第一個請求的邏輯內進行一次呼叫並進行另一次呼叫。在第一個請求完成之前,您的第二個請求將永遠不會執行。

我想,heroku實例會正常工作 - 它是多線程的。但我會建議改變你的代碼。例如,您可以將您的單獨服務轉換爲導軌引擎。

+0

首先,我使用rails 5,所以沒有Webrick,默認情況下它的Puma。其次,在這種情況下,heroku是否是多線程的並不重要,因爲應用程序本身在'localhost'上運行。 – Farooq

相關問題