2015-07-21 30 views
1

我想了解爲什麼下面的方法阻止應用程序。Net :: ReadTimeout與本地URI

url = 'http://192.168.1.33/assets/my_small_pic.jpg' 
image_file = open(url).read 

當我在控制檯上嘗試它時,它是完美的工作。但是,當我從一個API方法做到這一點,它的阻止我的應用程序和很長的路要走,我有以下錯誤後:

Net::ReadTimeout (Net::ReadTimeout) 

什麼是我的應用程序不喜歡我的方式來閱讀文件?

回答

0

我假設你正在使用「打開-URI」和API就是你發送請求到相同的回報率應用程序的一部分。在這種情況下,您的應用剛剛被第一個請求阻止,而您的向其發送第二個請求,因此第二個請求會給出超時。您應該在開發中僅看到此問題。在生產事情會有點不同,因爲由Nginx或Apache服務的靜態資產。此外,Rails 4默認在生產中是線程安全的,這意味着它一次可以處理多個請求。所以如果你使用Rails4,那麼在其他apis的生產調用中也會起作用。對於Rails3中你就必須明確指定config.threadsafe!

一般來說,我會建議你從同一個應用程序直接訪問資源或進行任何其他API調用。它更高效。在你上面的例子,你可以這樣寫的文件:

File.read(File.join(Rails.root, 'public/assets/my_small_pic.jpg')) 

如果仍然要發送的請求,則使其在發展工作,你不得不開始類似這樣的一個新的線程:

Thread.new do 
    open('http://192.168.1.33/assets/my_small_pic.jpg').read 
end