如何将rake任务的输出显示到浏览器?

时间:2015-09-27 22:33:52

标签: ruby-on-rails ruby web-scraping progress-bar mechanize

我有这个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

以下是终端输出,进度条显示:

enter image description here

那么,如何在浏览器上显示此进度?

1 个答案:

答案 0 :(得分:0)

进度条:

您可以将进度存储在数据库中并在浏览器页面中显示。

解析:

删除rake任务,并在用户点击链接

时将其作为ActiveJob运行