让Nokogiri与延迟工作一起工作

时间:2011-05-09 02:10:59

标签: ruby-on-rails ruby nokogiri delayed-job

我试图让Nokogiri在延迟工作时使用它,但到目前为止还不是很成功。

基本上我正在尝试在后台运行解析任务,但是当后台工作者点击我的perform方法时,它会在以下行中失败:

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

错误消息是:

  

Nokogiri :: HTML :: Document#inspect ArgumentError失败:需要Node,NodeSet或String参数,并且不能接受Delayed :: Backend :: ActiveRecord :: Job。

Delayed::Jobs.enqueuedelay方法都会发生这种情况。

如果我在控制台中尝试以下行,我会收到同样的错误:

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

这可能是一个愚蠢的疏忽,因为我对Ruby和Rails相当新,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

由于Nokogiri“需要Node,NodeSet或String参数”,为什么不给它一个呢?

而不是:

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

尝试:

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

这将导致IO读取open创建的文件句柄,并传递Nokogiri正在读取的URL的字符串内容。

另一种帮助调试问题的方法,我认为这不在Nokogiri中,而是将命令分开:

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