以下是刮刀的代码
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作业:工作)似乎没有做任何事情。我尝试在Heroku日志中记录一些行,我可以将url变量记录下来(因此该方法至少被调用)但是“。”每次我们运行while循环时都会显示,而且数据库中没有创建Houses。
任何想法可能有什么问题?
答案 0 :(得分:2)
我自己解决了这个问题,虽然这个问题很晦涩。我在我的本地环境中使用了ruby 1.9.2但我将应用程序部署在ruby 1.8.7堆栈上。
重要的区别在于两个ruby版本之间字符编码的变化,这意味着Mechanize无法找到与unicode编码字符“\ u00BB”的链接,因此没有进行任何抓取。