2015-07-21 59 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