我有这个rake文件从网站上抓取数据。当这个脚本抓取数据时,我使用rake-progressbar gem来跟踪它的进度。但是,现在我只能在我的终端中看到进度,只有当我在终端中运行rake文件时输入:" rake testing2"。
我现在想要的是当我点击触发我的rake文件的链接时能够在浏览器中看到进度。
这是我的主视图,其中包含触发rake文件的链接(testing2.rake):
<div>
<p>Find me in app/views/home/index.html.erb</p>
<h3>Scrape data:</h3>
<%= link_to "Scrape",:action => 'scrape' %>
</div>
这是我的家庭控制器:
class HomeController < ApplicationController
def index
end
def scrape
%x[rake testing2]
redirect_to root_url
end
end
这是我的rake文件(testing2.rake),其中包含用于抓取数据的代码以及进度条的代码:
require 'mechanize'
require 'date'
require 'json'
require 'rake-progressbar'
task :testing2 => [:environment] do
agent = Mechanize.new
last_page_number = 1
for pg_number in 1..last_page_number do
puts "Scrapping..."
page = agent.get("https://www.congress.gov/members?page=#{pg_number}")
page_links = page.links_with(href: %r{.*/member/\w+})
page_links_size = page_links.size
member_links = page_links
bar = RakeProgressbar.new(100)
members = member_links.map do |link|
member = link.click
name = member.search('title').text.split('|')[0]
institution = member.search('td~ td+ td').text.split(':')[0]
stripActivities = activities.reject { |x| x.length == 1 }
{
name: name.strip,
institution: institution.strip
}
bar.inc
end
bar.finished
end
end
以下是终端输出,进度条显示:
那么,如何在浏览器上显示此进度?
答案 0 :(得分:0)
您可以将进度存储在数据库中并在浏览器页面中显示。
删除rake任务,并在用户点击链接
时将其作为ActiveJob
运行