open-uri open命令在域上运行,针对同一域

时间:2011-07-01 10:11:13

标签: ruby-on-rails ruby timeout nokogiri open-uri

我在网页上构建了一个表单,允许用户输入URL,并返回有关URL的CSS的一些信息。除了我注意到的一个问题之外,该工具工作正常。

当我输入托管脚本的站点的URL(在本地测试,在登台服务器和生产服务器上测试)时,open-uri命令“open”返回Timeout :: Error。现在这并不奇怪,我猜测某些东西被锁定在某个地方并且在运行脚本和打开当前URL的过程中,进程被束缚了一点。

作为参考,以下是发生超时的方法:

 # loads the Nokogiri XML object if it hasn't already been loaded
 def site
   begin
     timeout(10) do
       @site ||= Nokogiri::HTML(open(url))
     end
   rescue Timeout::Error
     return nil
   end
 end

我的问题是,如何让脚本能够“打开”脚本当前运行的域?我是否需要创建另一个线程或其他东西来处理我的工具的这个特定方面,如果是这样的话,我怎么能确保我的脚本的其余部分不会运行,直到我从'open'命令收到有效的东西?

感谢您提出任何建议或提示。

1 个答案:

答案 0 :(得分:0)

我想知道你是否正在进入一个递归循环。您是否在httpd日志中看到重复的条目,显示对同一站点的请求?

如果是这样,您可能希望将请求短路到该特定域并预先填充@site实例变量以使其落空。