我有一个 nokigiri 网络爬虫,它发布到我试图发布到 heroku 的数据库。我有一个想从数据库中提取的 sinatra 应用程序前端。我是 Heroku 和 Web 开发的新手,不知道处理此类事情的最佳方法。
我是否必须将上传到数据库的网络爬虫脚本放在 sinatra 路由下(例如 mywebsite.com/scraper ),然后让它变得如此晦涩以至于没有人访问它?最后,我想让 sinatra 部分成为从数据库中提取的 rest api。
感谢所有输入
我有一个 nokigiri 网络爬虫,它发布到我试图发布到 heroku 的数据库。我有一个想从数据库中提取的 sinatra 应用程序前端。我是 Heroku 和 Web 开发的新手,不知道处理此类事情的最佳方法。
我是否必须将上传到数据库的网络爬虫脚本放在 sinatra 路由下(例如 mywebsite.com/scraper ),然后让它变得如此晦涩以至于没有人访问它?最后,我想让 sinatra 部分成为从数据库中提取的 rest api。
感谢所有输入
您可以采取两种方法。
第一个是通过控制台运行刮板来使用一次性测功机heroku run YOURCMD
。只要确保刮板不写入磁盘而是使用数据库即可。
更多信息: https ://devcenter.heroku.com/articles/one-off-dynos
第二个是区分爬虫和 Web 进程的方式,你有一个用于正常 UI 交互的 Web 进程和一个 Web 进程可以生成/对话的爬虫进程。如果您采用这条路线,则取决于您如何保护它免受世界其他地方的影响(auth/url 混淆等)。
更多信息: https ://devcenter.heroku.com/articles/background-jobs-queueing
我通过创建一个 rake 任务并使用 XLII 提到的一次性测功机来做到这一点
这是我的 rake 任务文件
require 'bundler/setup'
Bundler.require
desc "Scrape Site"
task :scrape, [:companyname] => :environment do |t, args|
puts "Company Name is :" + args[:companyname]
agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari'
puts "Agent (Mac Safari Created)"
# MORE SCRAPING CODE
end
您可以通过调用简单地运行它
heroku run rake scrape[google]