Команда open-uri open запускается в домене для того же домена

Я создал форму на веб-странице, которая позволяет пользователю вводить URL-адрес, и возвращается некоторая информация о CSS URL-адреса. Инструмент работает нормально, за исключением одной проблемы, которую я заметил.

Когда я ввожу 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

Мой вопрос: как мне включить скрипт, чтобы он мог «открывать» домен, на котором скрипт в данный момент работает? Нужно ли мне создавать еще один поток или что-то еще для обработки этого конкретного аспекта моего инструмента, если да, то как я могу гарантировать, что остальная часть моего сценария не будет запущена, пока я не получу что-то действительное из команды «открыть»?

Спасибо за любые предложения или советы по этому поводу.


person Pete    schedule 01.07.2011    source источник


Ответы (1)


Интересно, попадаете ли вы в рекурсивный цикл. Вы видите повторяющиеся записи в вашем журнале httpd, показывающие запросы для одного и того же сайта?

Если это так, вы можете сократить запросы к этому конкретному домену и предварительно заполнить переменную экземпляра @site, чтобы она не прошла.

person the Tin Man    schedule 03.07.2011
comment
Да, вы правы, проблема была в рекурсивном цикле. Я изменил свой код, чтобы, если хост сканируемого URL-адреса был таким же, как текущий хост, я просто сканировал локальную папку «таблицы стилей» с помощью Dir.each. - person Pete; 04.07.2011