0

ユーザーがURLを入力できるフォームをWebページに作成し、URLのCSSに関する情報を返します。私が気付いた1つの問題を除けば、ツールは正常に動作します。

スクリプトがホストされているサイトの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」コマンドから有効なものを受け取るまでスクリプトの残りの部分が実行されないようにするにはどうすればよいですか?

これに関する提案やヒントをありがとう。

4

1 に答える 1

0

再帰的なループに入っているのではないかと思います。同じサイトへのリクエストを示すhttpdログに繰り返しエントリが表示されていますか?

その場合、その特定のドメインへのリクエストを短絡し、@siteインスタンス変数を事前に詰め込んで、失敗するようにすることができます。

于 2011-07-03T18:06:05.283 に答える