Как заставить Нокогири работать с отложенными вакансиями - PullRequest
1 голос
/ 09 мая 2011

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

В основном я пытаюсь выполнить задачу анализа в фоновом режиме, но когда фонрабочий нажимает мой метод перформанса, он завершается с ошибкой в ​​следующей строке:

HTML_page = Nokogiri::HTML(open('http://www.mysite.com'))

Сообщение об ошибке:

Nokogiri :: HTML :: Document # inspect ошибка ArgumentError: Требуетсяаргумент Node, NodeSet или String и не может принять Delayed :: Backend :: ActiveRecord :: Job.

Это происходит как с методами Delayed::Jobs.enqueue, так и delay.

Если я попробую строку в консоли ниже, я получу ту же ошибку:

Nokogiri::HTML(open('http://www.mysite.com')).delay

Это может быть глупым упущением, так как я довольно новичок в Ruby и Rails, поэтому любая помощьбудет принята с благодарностью.

1 Ответ

0 голосов
/ 09 мая 2011

Поскольку Nokogiri «Требуется аргумент NodeSet или NodeSet», почему бы не указать его?

Вместо:

HTML_page = Nokogiri::HTML(open('http://www.mysite.com'))

try:

HTML_page = Nokogiri::HTML(open('http://www.mysite.com').read)

Это заставит IO прочитать дескриптор файла, созданный open, и передать Nokogiri строковое содержимое читаемого URL.

Альтернативный способ помочь отладить проблему, которая, я не думаю, находится вНокогири, это немного разделить твою команду:

body = open('http://www.mysite.com').read
HTML_page = Nokogiri::HTML(body)
...