这是抓取器的代码
class Scrape
def perform
url = "# a long url"
agent = Mechanize.new
agent.get(url)
while(agent.page.link_with(:text => "Next Page u00BB")) do
agent.page.search(".content").each do |item|
puts "."
House.create!({
# attributes...
})
end
agent.page.link_with(:text => "Next Page u00BB").click
end
end
end
在我的本地环境中,我只需键入即可在 rails 控制台中运行它
Scrape.new.delay.perform # to queue the job
rake jobs:work
它工作得很好。
但是,在 Heroku 控制台中运行类似的操作(运行工人而不是 rake jobs:work)似乎没有任何作用。我尝试在 Heroku 日志中记录一些行,我可以让 url 变量记录(因此该方法至少被调用),但每次我们运行 while 循环时都会显示的"."永远不会出现,也没有在数据库中创建房屋。
有人知道可能出了什么问题吗?
自己解决了这个问题,虽然很晦涩的错误。我在本地环境中使用 ruby 1.9.2,但我将应用程序部署在 ruby 1.8.7 堆栈上。
重要的区别在于两个 ruby 版本之间的字符编码变化,这意味着 Mechanize 找不到与 unicode 编码字符"\u00BB"的链接,因此没有进行任何抓取。