2013-01-03 33 views
0

中在ruby on rails控制檯'net​​/http'中起作用,但是在控制器中它並沒有出現超時錯誤。net/http rails問題只在控制檯

require 'net/http' 
uri = URI('http://localhost:3000/api_json.json') 
json = Net::HTTP.get(uri) 
parsed_json = ActiveSupport::JSON.decode(json) 

回答

0

很可能您使用的是默認的Webrick服務器,一次只能提供一個請求。所以,從控制檯它工作正常,但當你試圖從控制器調用它(當Webrick工作者已經很忙時)失敗。

你可以嘗試設置和運行像獨角獸或薄另一臺服務器,或者在不同的端口運行兩個使用WEBrick實例:

rails server 
rails server -p 3001 

,去爲localhost:3001

0

@ dimuch的解決方案可能會解決你的問題,但它可能有助於面臨類似情況的人。我將詳細解釋這個問題和解決方案(@ dimuch解決方案的擴展)。

問題:

你可能有這樣一些控制器:「/ test_controller/test_method」,你可能想調用一個方法,在控制器中,像/ API/V1/some_test_api,並面臨着錯誤,如已完成在60004.4ms 500內部服務器錯誤 [27580c5c46770812c550188346c2dd3e] [127.0.0.1] [/ xauth_test/sanity_oauth_login] 超時::錯誤(超時::錯誤):

解決方案:作爲由所述@dimuch

, 「 您最有可能使用默認的Webrick有條件的,一次提供一次請求......「。 1.您需要在不同的端口上運行應用程序,例如 rails s -p 3000和rails s -p 3001,然後從3001發出請求。 如果您遇到類似「服務器已在運行,檢查/ tmp/pids/server.pid。退出「,然後嘗試運行rails s -p 3001 -P PROCESS_ID。 2.使用其他服務器的獨角獸或彪馬。

注意:如果你只是想在本地測試目的,那麼我會建議使用第一個解決方案,這很簡單。對於英語不好,我很抱歉,我發現了大部分來自其他堆棧溢出頁面和網站的解決方案,我在下面附上了這些鏈接(鏈接參考),如果我錯過了某個或某些要引用的內容,我會很抱歉。希望這可以幫助某人。

參考文獻: 對於運行多個實例:

Running multiple instances of Rails Server

類似的錯誤,他們的處理方式:

Rails HTTParty Getting Timeout::Error

Faraday timeout error with omniauth (custom strategy)/doorkeeper

Strange Timeout::Error with render_to_string and HTTParty in Controller Action

配置獨角獸&彪馬:

http://vladigleba.com/blog/2014/03/21/deploying-rails-apps-part-3-configuring-unicorn/

https://github.com/puma/puma