0

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

当我输入托管脚本的站点的 URL(在本地、登台服务器和生产服务器上测试)时,open-uri 命令“打开”返回 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

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

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

4

1 回答 1

0

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

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

于 2011-07-03T18:06:05.283 回答