【发布时间】:2011-07-16 23:41:29
【问题描述】:
我是 Ruby on Rails 的新手,想创建一个抓取数据并将其插入数据库的爬虫。我目前正在使用 Heroku,因此无法直接访问数据库,并且想知道将爬虫脚本集成到 RoR 框架的最佳方法是什么。我会使用每小时或每天的 cron 来运行脚本。
【问题讨论】:
标签: ruby-on-rails ruby database heroku insertion
我是 Ruby on Rails 的新手,想创建一个抓取数据并将其插入数据库的爬虫。我目前正在使用 Heroku,因此无法直接访问数据库,并且想知道将爬虫脚本集成到 RoR 框架的最佳方法是什么。我会使用每小时或每天的 cron 来运行脚本。
【问题讨论】:
标签: ruby-on-rails ruby database heroku insertion
如果您在 Heroku 上使用 Rails,您可以只使用 ORM 适配器,如 Datamapper 或 ActiveRecord。然后,这使您可以访问您的数据库,但基本上是通过一个层。如果您需要将原始 sql 发送到数据库,您可以,但通常不建议这样做,因为 ORM 提供了您需要的几乎所有内容。
您基本上只需在您的 Rails 应用程序中创建模型,就像在表中创建正常的模型和关联的字段。
rails g model page meta_title:string page_title:string
rake db:migrate # This has to be run on heroku too "heroku rake db:migrate" after you have pushed your code up
然后在您的爬虫脚本中,您可以仅使用您的模型创建记录...
Page.create(:title => crawler[:title], :meta_title => crawler[:meta_title])
通常你可以使用 When(https://github.com/javan/whenever) 来管理你的 cronjobs 但在 Heroku 上我不确定它是如何工作的,因为我之前没有在 Heroku 上设置过任何东西。
【讨论】:
我建议 2 个选项中的 1 个:
使用一个 ruby 脚本,该脚本使用 require rubygems 以及您想要完成任务的其他帮助程序库(如 Rails、ActiveRecord 等),然后 cron 该脚本。
wget 命令。效率不是很高,但如果您只是在现有设置的基础上寻找快速而肮脏的东西,那会很好用。只需确保将 STDOUT 和 STDERR 发送到 /dev/null,这样您就不会最终积累 CRON 文件。
【讨论】: