【问题标题】:open-uri open command run on a domain, against the same domainopen-uri 打开命令在域上运行,针对同一个域
【发布时间】:2011-09-26 15:46:01
【问题描述】:

我在网页上构建了一个表单,允许用户输入 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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,你是对的,问题是递归循环。我更改了我的代码,以便如果正在扫描的 url 的主机与当前主机相同,那么我只需使用 Dir.each 扫描本地的“样式表”文件夹。
    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 2017-10-23
    • 2016-04-14
    • 2013-01-21
    • 1970-01-01
    • 2014-08-12
    • 2018-12-16
    • 2016-10-26
    相关资源
    最近更新 更多