2011-05-09 80 views
1

我想讓Nokogiri在延遲工作時使用它,但迄今還沒有非常成功。獲取Nokogiri與延遲工作

基本上我想在後臺運行一個解析任務,但是當背景工人打我的執行方法,在下面的行失敗:

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

的錯誤信息是:

Nokogiri::HTML::Document#inspect failed with ArgumentError: Requires a Node, NodeSet or String argument, and cannot accept a Delayed::Backend::ActiveRecord::Job.

這種情況發生在Delayed::Jobs.enqueuedelay方法中。

如果我嘗試下面的控制檯行,我得到了同樣的錯誤:

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

,因爲我是相當新的Ruby和Rails這可能是一個愚蠢的監督,所以任何幫助將不勝感激。

回答

0

由於Nokogiri「需要節點,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)