嘗試訪問網頁時發生超時異常。 在控制方法或輔助方法,試圖讓本地URL的內容:如何從Rails中的控制器方法獲取本地url的內容?
require 'open-uri'
data = JSON.load(open('http://0.0.0.0:3000/notebookcheck/cpus.json'))
結果得到超時錯誤。 如果我在irb中運行這個代碼,它會工作。
我怎樣才能正確得到本地網址的內容在鐵軌?
嘗試訪問網頁時發生超時異常。 在控制方法或輔助方法,試圖讓本地URL的內容:如何從Rails中的控制器方法獲取本地url的內容?
require 'open-uri'
data = JSON.load(open('http://0.0.0.0:3000/notebookcheck/cpus.json'))
結果得到超時錯誤。 如果我在irb中運行這個代碼,它會工作。
我怎樣才能正確得到本地網址的內容在鐵軌?
我認爲你需要打開該文件後添加.read
:
require 'open-uri'
data = JSON.load(open('http://0.0.0.0:3000/notebookcheck/cpus.json').read)
沒有用,同樣的問題 - Timeout :: Error – ambi 2014-10-27 18:51:15
直覺:
這是發生,因爲請求被依次處理。
假設你有兩個請求。一種是查看頁面A,另一種是查看頁面B.
但是,查看頁面A完成之前,無法滿足查看頁面B的請求。
在你的情況下,你創建了一個依賴項:頁面A 不能完成渲染,直到頁面B呈現。但是,直到先前的所有請求(在這種情況下,呈現頁面A的請求)完成之前,頁面B纔會呈現。
總之,完成讀取請求取決於請求的頁面加載。
這裏發生了什麼:
您的要求來渲染JSON無法完成,直到原始請求完成 - 這樣的進程掛起。
最終,它等待時間過長,超時。
發生這種情況是因爲與其他語言(例如Javascript)不同,Ruby請求在單線程(即同步,而不是異步)上運行時被阻塞。
解決方案:
請注意,如果你正在運行多個進程或線程,這會工作。看到這個SO answer ..
但是,你可以直接渲染文件,直接使用Rails中的render_to_string
方法進行字符串處理。
祝你好運。
我有點懷疑你是否需要「http://0.0.0.0:3000」。你檢查了日誌,看看rails是否得到這個文件? – argentum47 2014-10-27 07:54:16
嘗試打開時失敗('http://0.0.0.0:3000/notebookcheck/cpus.json') – ambi 2014-10-27 08:20:52