我试图让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.enqueue
和delay
方法都会发生这种情况。
如果我在控制台中尝试以下行,我会收到同样的错误:
Nokogiri::HTML(open('http://www.mysite.com')).delay
这可能是一个愚蠢的疏忽,因为我对Ruby和Rails相当新,所以任何帮助都会非常感激。
答案 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)